首页 > 试题广场 >

针对下面的代码块,哪个选项结果为true:() String

[单选题]
针对下面的代码块,哪个选项结果为true:()
String s1 = "abc" ;
String s2 = "abc" ;
String s3 =new String (s1);
  • s1 == s2
  • s1 = s2
  • s2 == s3
  • 都不正确

String有两种实例化方式:

  1. 直接赋值
  2. 使用new关键字

两种实例化方式比较:

  • 直接赋值只会开辟一块堆内存空间,并且会自动保存在常量池之***享
  • 构造方***开辟两块堆内存空间,不会自动入池,其中一块将成为垃圾,可以用 intern()方法手动入池

字符串常量是String类的匿名对象

发表于 2019-07-30 11:13:21 回复(1)
不对吧,s1s2s3全都是全新的对象,如果比较地址值的话指向都不一样啊,怎么会选a啊
选项上面用的是等于号比较,题目上面用的是equal比较,怎么回事啊
编辑于 2019-07-10 22:53:07 回复(6)
== 符在对象间比较的是内存地址
发表于 2021-06-11 15:01:57 回复(0)
不应该编译出错吗?
String s3 =new String (s);
哪来的 s。
发表于 2019-07-22 11:30:56 回复(2)
使用字符串常量给String变量赋值,这个字符串常量会被存进内存的常量池里面,供整个程序使用,所以s1和s2实际是引用了同一个字符串对象,地址相同,而new出来的是在存在堆内存中,单独的一份,所以s3和另外两个地址不同
发表于 2019-07-15 23:10:25 回复(0)
最后一个s。。。。应该是打印错了吧
发表于 2019-07-03 14:38:16 回复(0)
string是final修饰的,会将创建的变量放入字符串常量池,当再创建同样的字符串时,发现常量池中有则直接使用
发表于 2021-10-06 07:07:31 回复(0)
“==”比较的是地址值,
创建对象的方式有两种:
1.表达式创建
eg:Integer a=1;
     Integer b=1;
理解;JVM运行时,有个线程池,表达式创建时,会在线程池中寻找值相等的值,没有的话就赋予新地址值,有的话就用已有的地址值(即不变)。
2.new创建
eg:int a=new int();
     在堆中重新分配存储,栈中地址值不同,即存储地址值不同
编辑于 2021-05-23 09:13:26 回复(0)
一般情况  一摸一样基本是一个地址
发表于 2021-01-08 09:13:42 回复(0)
xiaopeng这个字符串存放在方法区的字符串常量池中,s1.s2都指向这个常量池中的存放地址;通过new创建的对象存放在堆中,s3中存放的是堆中的地址,而堆中的对象存放的是字符串常量池中的地址
发表于 2020-05-25 00:46:04 回复(0)
说实话,没看懂题目,哪个equal为true?这个问题和下面的选项有什么关系?!?
发表于 2020-03-31 15:50:42 回复(1)
补充一下知识点: 
== 比较的是两个变量是否指向同一个对象;
equals() 方法比较的是两个对象的内容是否相等。
发表于 2019-07-29 22:23:56 回复(0)
这个题感觉有看法,题目所用equals 但是A选项却用了==这个符号,而==符号表示判断S1和S2数为内存地址
发表于 2019-07-14 19:46:29 回复(0)
string是final修饰的,会将创建的变量放入字符串常量池,当再创建同样的字符串时,发现常量池中有则直接使用
发表于 2019-07-10 00:22:14 回复(4)
String s 1 = "xiaopeng",这种定义字符串的方式,首先看看字符串常量池中是否有“xiaopeng"如果有就就直接从常量池中取,没有则将“xiaopeng"放到常量池中。String s2 = 'xiaopeng",常量池中有”xiaopeng",直接取值。string s3 = new String("xiaopeng");直接在堆中产生一个字符串“xiaopeng”.所以s1和s2地址一样,和s3地址不一样
编辑于 2019-07-23 09:01:24 回复(0)

通过String s1 = "xiaopeng" ;会将字符串自动放入常量池中

发表于 2019-07-02 10:49:47 回复(0)
1. 分析字符串比较的原理 - 在Java中, == 用于比较两个对象的引用是否相同,而 equals 方法用于比较两个对象的内容是否相同。 - 对于字符串常量,当使用 String s1 = "abc"; String s2 = "abc"; 这样的方式创建时,如果字符串常量池中已经存在 "abc" 这个字符串,那么 s1 和 s2 将指向字符串常量池中的同一个对象,所以 s1 == s2 为 true 。 - 当使用 new 关键字创建字符串对象时,如 String s3 = new String(s1); ,会在堆内存中创建一个新的对象,即使它的内容与 s1 相同,但它的引用与 s1 和 s2 所指向的字符串常量池中的对象不同,所以 s2 == s3 为 false 。 2. 检查各个选项 - 选项A: s1 == s2 ,因为 s1 和 s2 都指向字符串常量池中的 "abc" ,所以该选项正确。 - 选项B: s1 = s2 是赋值语句,不是比较语句,不符合题目要求。 - 选项C: s2 == s3 为 false ,前面已经分析过。 答案是A。
发表于 2024-10-25 16:00:41 回复(0)
问一下B选项的赋值操作后,S1可以转化为true吗,类似if(3)这种
发表于 2022-01-22 11:53:00 回复(0)
s1先被放入常量池,然后s2直接引用常量池,而s3使用new 关键字创建,与前两者不同
发表于 2021-09-05 15:28:14 回复(0)
String s1 = "xiaopeng" xiaopeng会在字符串常量池中,当 String s2 = "xiaopeng" ;创建时,先会去常量池找查找是否有,如果有的话就可以直接使用了.String s3 =new String (s1); 会在堆中创建一个字符串"xiaopeng",s1,s2地址一样,s3不一样,选项二是赋值符号.
发表于 2021-07-31 09:50:03 回复(0)