黑马程序员技术交流社区

标题: 关于引用传递 [打印本页]

作者: 小小    时间: 2012-6-3 14:29
标题: 关于引用传递
  1. String str1 = new String("abc");  
  2. String str2 = "abc";  
  3. System.out.println(str1==str2);
复制代码
很疑惑,为什么返回值居然是false
作者: 张少威    时间: 2012-6-3 14:31
String str1 = new String("abc");  
上面这句,str1引用的是堆内存中的对象
String str2 = "abc";  
str2引用的是池中的对象

str1和str2是不同的引用,所以会反回false
作者: 陈嘉宾    时间: 2012-6-3 14:32
== 比较两个对象是否是同一对象,str2是一个对象,str1是两个对象new一个对象跟abc
作者: 梁小波    时间: 2012-6-3 14:33
老问题了吧,搜一下可以!
String a="123";//1个对象

String b=new String("123");//2个对象

有几个对象的问题;但你真的了解常量池吗?

String pool是在编译的时候建立的,也就是说,在编译的时候123就已经在stringpool中了;但new的对象是在运行时建立的,也就是说在heap中会有new的对象;可以说明了;第一个在编译时已存在,第二个在编译时存在一个,运行时有产生了一个。
作者: 胡团乐    时间: 2012-6-3 16:34
其实这问题只要记住一点就行
==比较的是对象的地址值 你创建了两个String对象 地址值不同 所以打印false;
而equals 比较的是对象的内容 System.out.println(str1.equals(str2)); 就会打印true;
作者: 李春阳    时间: 2012-6-3 17:24
==这个问题很常误解:
==比较的是俩对象的引用也就是地址,而不是比较对象具体内容。

因而实现字符串对已的话应该用equals方法~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2