A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小地瓜 中级黑马   /  2015-11-13 18:23  /  5130 人查看  /  68 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.   下面程序的运行结果是(      )
  String s1 = “abc”;
  String s2 = new String(“abc”);
  System.out.println(s1==s2);
  String s3 = “你好吗”;
  String s4 =”你”;
  String s5 =”好吗”;
  System.out.println(s3==(s4+s5))
a)    true true
b)    false true
c)    true flase
d)    false false

并且写出答案的原因。

68 个回复

倒序浏览
我不会啊  !     选c 吧
回复 使用道具 举报
D            
String a = "aa"+"bb";
String b = "aabb";
a==b //true
回复 使用道具 举报
本帖最后由 keaitao0321 于 2015-11-13 20:47 编辑

B   S2创建了对象。S4 S5先进行字符串拼接,拼接完成再返回,它的地址值和S3是一样的
错了应该是D 都是false  如果是System.out.println(s3==“你”+“好吗”)  则是true

回复 使用道具 举报
应该是D,s4和s5拼接之后得到了一个新串,地址值和s3并不一样
回复 使用道具 举报
D  都不一样
回复 使用道具 举报
tf0612 中级黑马 2015-11-13 21:28:57
7#
选B。S1是存储在静态常量池中的,而S2是创建的另一个对象,所以S1 != S2;S3和S4都是在静态常量池中的字符串,而且是一样的
回复 使用道具 举报
选D
String s1 = “abc”;       //常量,存放在常量池中,s1的地址也指向常量池
  String s2 = new String(“abc”);   //new出来的是一个地址,"abc"常量也是一个地址,这句话创建了两个对象
  System.out.println(s1==s2);   //所以地址不一样
  String s3 = “你好吗”;
  String s4 =”你”;
  String s5 =”好吗”;
  System.out.println(s3==(s4+s5))    //s4  s5分别是变量,变量在编译时不能肯定其值,所以s3和他们的地址值是不一样的

这里比较的均是地址值,多以都返回false
回复 使用道具 举报
应该选C是吧??
回复 使用道具 举报
String s1 = “abc”;
  String s2 = new String(“abc”);
  System.out.println(s1==s2);
是false  因为是两对象  比较的是地址
String s3 = “你好吗”;
  String s4 =”你”;
  String s5 =”好吗”;
  System.out.println(s3==(s4+s5))
是false S3是常量  而S4+S5是要在堆内存中进行运算 引用类型跟常量比较肯定是false
回复 使用道具 举报
D,S1是一个对象,S2是2个对象,地址值不同,S4+S5 又是一个对象,地址值都不同
回复 使用道具 举报
本帖最后由 xiao15779706 于 2015-11-14 13:55 编辑

应该选b吧  第一个一个在字符串常量池 一个新建的 地址值不一样  一二个两个都在字符串常量池
回复 使用道具 举报
大自然的搬运工 发表于 2015-11-13 19:43
D            
String a = "aa"+"bb";
String b = "aabb";

然后怎么说明,中文呢?
回复 使用道具 举报
keaitao0321 发表于 2015-11-13 20:26
B   S2创建了对象。S4 S5先进行字符串拼接,拼接完成再返回,它的地址值和S3是一样的
错了应该是D 都是fals ...

貌似不是这样,问了老师,说是“你好”+ “吗”是在堆内存中完成的,最好是将堆内存的地址值赋给了S2
回复 使用道具 举报
唯我独赞mo 发表于 2015-11-13 20:45
应该是D,s4和s5拼接之后得到了一个新串,地址值和s3并不一样

点赞,解释的不错,亲们是在哪个校区呢
回复 使用道具 举报
young_ants 发表于 2015-11-13 21:47
选D
String s1 = “abc”;       //常量,存放在常量池中,s1的地址也指向常量池
  String s2 = new String( ...

赞!帅哥是哪个校区的?
回复 使用道具 举报

正确的答案是 D
回复 使用道具 举报
选D   s1  s2一个是常量池的地址  一个是堆内存的地址  肯定不一样  false    s3 s4  s5都是常量吃中的,但是s4+s5是变量在进行运算,会另外开辟一块空间进行调用常量池的内容 但== 对比的是地址值   所以也是false
回复 使用道具 举报
本帖最后由 hansnowqiang 于 2015-11-16 22:12 编辑

D s1反映的是方法区中常量池的地址,s2是在堆中的new出来的地址 所以falses3、s4、s5虽然都指向常量池中,但是在做s4+s5时是变量 ,变量运算是先开空间再做运算。

如果是 System.out.println(s3==“你”+“好吗”);输出就是true。因为“你”“好吗”是在常量池中的常量。
回复 使用道具 举报
小地瓜 发表于 2015-11-16 00:34
赞!帅哥是哪个校区的?

北京这边的,你呢?
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马