黑马程序员技术交流社区
标题:
Java中StringBuilder转化为字符串之后,相等比较的问题
[打印本页]
作者:
雷丹
时间:
2013-10-24 10:58
标题:
Java中StringBuilder转化为字符串之后,相等比较的问题
public static void main(String[] args) {
StringBuilder orgin = new StringBuilder("12321");
String sOrgin = orgin.toString();
StringBuilder orgin2 = orgin.reverse();
String sOrgin2 = orgin2.toString();
System.out.println(sOrgin==sOrgin2);
System.out.println(sOrgin.equals(sOrgin2));
}
运行结果,第一个是false,第二个是true。
现在想问的是,第一个结果为何是false,在执行String sOrgin = orgin.toString();之后,sOrgin是栈上的引用,orgin.toString()还是堆上的空间吗。从结果上看貌似是的,堆上的字段进行运算之后还是分配在堆上是吗 自己不太明白。
作者:
孙涛00
时间:
2013-10-24 11:15
System.out.println(sOrgin==sOrgin2);中这是两个对象,在栈的引用,各自指向堆里面的两个String实例,当然是不相等,因为他们本来就是不同的两个对象。
sOrgin.equals(sOrgin2)是判断两个String对象的值是否相等,只要相等就返回true。
作者:
王飚
时间:
2013-10-24 12:16
这个问题的关键是sOrgin和sOrgin2本来就是两个不同的对象,所以用“==”当然就不相等了,而equals则是被String类重写,所以,具有自己特有的比较方式,所以结果为true;
作者:
向阳泪无痕
时间:
2013-10-24 12:17
public static void main(String[] args) {
StringBuilder orgin = new StringBuilder("12321");
String sOrgin = orgin.toString();//返回新的字符串
StringBuilder orgin2 = orgin.reverse();//反转
String sOrgin2 = orgin2.toString(); //返回新的字符串
System.out.println(sOrgin==sOrgin2);//“==”比较其引用,两次返回的地址是不一样的,所以是不同的,flase
System.out.println(sOrgin.equals(sOrgin2));//“equals”比较的是两个字符串的内容是否相同,因为反转后值是一样的,所以是true
}
复制代码
作者:
漫步人
时间:
2013-10-24 13:48
System.out.println(sOrgin==sOrgin2);中这是两个对象,在栈的引用,各自指向堆里面的两个String实例,当然是不相等,因为他们本来就是不同的两个对象。 sOrgin.equals(sOrgin2)是判断两个String对象的值是否相等,只要相等就返回true。
作者:
qixing0918
时间:
2013-10-25 09:04
System.out.println(sOrgin==sOrgin2);//“==”比较其引用,两次返回的地址是不一样的,所以是不同的,flase
System.out.println(sOrgin.equals(sOrgin2));//“equals”比较的是两个字符串的内容是否相同,因为反转后值是一样的,所以是true
说到对
string 类重写了 object的 equals 方法 object的equals 就是==地址值比较 而string 是比较对象具体值
我要说的是 一个字符串的 创建要有两个对象 一个是在池内 一个是在池外 当然你创建的对象引用池外的
而当你再去 创建一个对象时 jvm会去池内找 如果有直接引用 如果没有就要重复上一步
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2