本帖最后由 高亮亮 于 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.
日回一帖,睡到坑爹~睡觉了
|