黑马程序员技术交流社区
标题:
字符串问题
[打印本页]
作者:
yaohsieh
时间:
2014-1-15 23:37
标题:
字符串问题
单选:编译并运行以下代码的输出结果是?( )
答案是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
作者:
高亮亮
时间:
2014-1-16 00:46
本帖最后由 高亮亮 于 2014-1-16 00:48 编辑
字符串在某些情况相当特殊.
这道题相当面熟,楼主传智的吧~
上课老师也说过这题目.
String s2 = s1.replace('m','r');
String s3 = "arit";
System.out.println(s2 == s3);
这里的s3,因为之前的代码在执行过程中,没有字符串的常量池中拼出来"arit"的字符串,所以这里的操作是在字符串常量池拼一个"arit",然后将这个字符串常量赋值给s3.
而s2,是用s1的"amit"将'm'字符,用'i'字符替换.这里的具体操作时先在字符串常量池中声明一个字符串对象,然后将"amit"进行replace操作,随后得到的"arit"结果放入这个之前声明的对象.这个过程中,jvm根本就不会找常量池中有没有跟这个结果一样的字符串常量. 因为你想,jvm又不知道你操作结果会是什么,他怎么会未卜先知的去找他不知道的东西呢?他可不是我们智慧的人类~
好了,所以,比较结果为false.
日回一帖,睡到坑爹~睡觉了
作者:
黄晓鑫
时间:
2014-1-16 00:53
A 字符串一旦初始化值就不会被改变
作者:
yaohsieh
时间:
2014-1-16 01:16
高亮亮 发表于 2014-1-16 00:46
字符串在某些情况相当特殊.
这道题相当面熟,楼主传智的吧~
上课老师也说过这题目.
这句“jvm又不知道你操作结果会是什么,他怎么会未卜先知的去找他不知道的东西呢?”回答给力!透彻!
哈哈,咱一个班,亮哥是真学霸。
作者:
mrwise1991
时间:
2014-1-16 10:47
不错,s2和s3这两个引用所指向的内容都是arit,但是他们指向的地址值不同,而==这个符号比较的是对象的引用地址值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2