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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaohsieh 中级黑马   /  2014-1-15 23:33  /  1400 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单选:编译并运行以下代码的输出结果是?(  ) 答案是A,为啥选A不选D呢?两个都是"arit",不是从字符串常量池拿么?
String s1 = new String("amit");
System.out.println(s1.replace('m','r'));
System.out.println(s1);
String s3 = "arit";
String s4 = "arit";
String s2 = s1.replace('m','r');
System.out.println(s2 == s3);
System.out.println(s3 == s4);

A.       
arit
amit
false
true

B.       
arit
arit
false  
true

C.
amit
amit
false
true

D.
arit
amit
true
true


评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

5 个回复

倒序浏览
replace返回的是一个newString,s2与s3的地址不同,s3与s4应用的是同一个字符串

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
s2是新产生的字符串的地址值,s3和s4地址相同

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
回去复习了下前面的,明白了,谢谢二位
回复 使用道具 举报
String s1 = new String("amit");             //创建了一个String类型的实例对象
System.out.println(s1.replace('m','r'));    //打印替换了的"amit" 但是s1在内存中并没有改变
System.out.println(s1);                            //打印的结果为  "amit"
String s3 = "arit";                                       //定义了一个String类型的字符串对象 "arit"
String s4 = "arit";                                       //将s3的引用赋给了s4 ,即s3和s4指向的是同一对象
String s2 = s1.replace('m','r');                    //s2为切换后的字符串"arit"
System.out.println(s2 == s3);                   // s2和s3不是同一对象,所以为 false
System.out.println(s3 == s4);                  //s3,和s4指向的是同一对象,所以结果为true



答案选A是正确的!
回复 使用道具 举报
s2输入replace()操作后的,属于行的字符串,而S3、s4是同以字符串,存的位置也是相同的

equals与==的区别
eg:
对于字符串而言,比较两个变量本身的值,即两个对象在内存中的首地址,equals()方法比较两个字符串所包含的内容是否相同

对于非字符串而言,==与equals方法比较两个字符串所包含的内容是否相同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马