第1个回答 2015-03-02
abc
false
String类里的无论是substring方法还是replace方法都会返回一个新的字符串,因此s是不会变的;
new String("abc")也会产生一个新的字符串变量,只是内容是abc,和变量s相同,而s==value比较的是二者的内存地址,java中每产生一个新的变量就会分配一个新的内存地址,因此二者相等是false
第2个回答 2015-03-02
abc
false
String类是一个final类,对象被创建后就不能修改,==比较的是两个变量的引用对象是否是同一个,而不是对象的属性是否相同,判断两个对象是否相等应该用equals方法本回答被网友采纳
第3个回答 2015-03-02
abc
false
你之前的
s.substring(1);
s.replace("bc", "xyz");都没有赋值给s,所以s的值是不变的。
如果你这样写的话
s=s.substring(1);
s=s.replace("bc", "xyz");
s输出的是xyz
还有为什么是false呢?
==这个指的是是否是同一个对象,你后来的value是new的,就是重新见了一个对象,s和value是两个对象,所以不相等
如果你用s.equals(value),这个返回的是true,因为他们比较的是值是否相等,值都是“abc”,所以返回true
第4个回答 2015-03-02
abc
false
输出abc是因为:s.substring(1)语句只是将s串进行了截取,将截取的结果进行返回,但是并没有改变s串;s.replace("bc","xyz")语句是将s串中的bc部分替换为xyz并将结果返回,也没有改变s串。两个语句虽然都有返回值,但是没有左值,也就是没有用变量接收这个返回值。
输出false是因为s==value,虽然s串和value串中的字符都相同,但是还是两个字符串。String s="abc"语句在字符串池中产生了一个"abc"串,String value=new String("abc");也同意在字符串池中产生了一个"abc"串,两个字符串是同时存在于字符串池中的,所谓的字符串池可以理解为内存中的一个部分专门用来存放字符串的地方。既然是有两个相同的字符串在内存中,那么它们的地址就是不一样的,而s==value中的比较运算符==比较的就是字符串的地址,准确来说应该是通过比较两个字符串的哈希码,所谓的哈希码就是通过hash算法使用字符串的内存中地址计算得到的结果。既然两者的地址不同,那么hash算法得到的哈希码也是不一样的,所以就是false