黑马程序员技术交流社区

标题: 关于“==”是引用比较还是值比较? [打印本页]

作者: Dora    时间: 2014-3-4 23:58
标题: 关于“==”是引用比较还是值比较?
int e = 1;
Integer f = new Integer(1);
System.out.println(e==f);
int e = 1;
Integer f = new Integer(1);
System.out.println(e==f);

为什么输出的是true?
“==”比较符在基本类型比较的是具体值,在引用类型比较的是引用值,e的值是1,f是引用,为什么能是相等的呢?  难道f的引用值也是1?
想不明白,请求解答
作者: 再见理想    时间: 2014-3-5 00:10
这个问题我也纠结很久。但我的猜想是当对象与基本数据类型进行比较的时候,应该是将Integer转换为int类型之后再进行比较。
也符合数据类型一一致的要求。
这也是我个人觉得,仅供参考。
作者: 戚兴海    时间: 2014-3-5 00:53
亲,有种设计模式叫享元设计模式的哦!
int类型的一些比较常用的数据,java中会事先将它们都封装好,当需要创建这些数据的对象类型时,直接将事先封装好的对象返回。 int类型中0~127都是这样的模式,也就是它们其实都是同一个对象。这样比较节约空间,多个引用共享一个对象,所以称为享元模式。

int型的数据超过一个字节便不再享元了,需要各自创建自己的对象,再比较的话就会返回false了。

作者: 赵卓辉    时间: 2014-3-5 01:33
  1. /*
  2. 在jdk1.5后引入了自动装箱与自动拆箱,当你代码中的e和f比较的时候,jdk会自动把两者转换成同一类型来比较。f会自动拆箱成int型,==比较的是栈内存中的值是否相等,基本数据类型就是比较值,引用数据类型则比较栈中引用的地址。int型的e和f是直接比较值是否相等。
  3. 所以返回为true*/
  4. public class TestDemo {
  5.         public static void main(String args[]){
  6.                 int e = 1;
  7.                  Integer f = new Integer(1);
  8.                  System.out.println(e==f);
  9.         }
  10. }
复制代码

作者: love~陌    时间: 2014-3-5 15:43
  “==”运算符与equals()方法的区别
  
  前者用于比较两个引用数据类型的变量的值是否相等,
  后者用于比较两个引用变量所指向的对象的内容是否一样
举个例子吧
  1. class YDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Integer x=new Integer(1);
  6.                 Integer y=new Integer(1);
  7.                 Integer z=x;
  8.                 if (x==z)
  9.                 {
  10.                         sop("true");
  11.                 }
  12.                 else
  13.                         sop("false");
  14.         }
  15.         public static void sop(Object obj)
  16.         {
  17.                 System.out.println(obj);
  18.         }
  19. }
复制代码

输出结果为true
因为x和z都指向同一个地址值的对象
若判断条件是x==y的话,那么输出结果为false,因为二者的地址值是不一样的

若是判断条件为x.equals(y)的话,那么输出结果是true,equals()判断的所引用对象的内容是否一致
作者: 絮缘小默    时间: 2014-3-5 18:06
==比较的是栈内存中的值是否相等,基本数据类型就是比较值
,你的意思也就是说基本数据类型进行“==”是进行值比较??那基本数据类型定义后会不会在内存中分配空间呢??如果分配为什么不是进行地址的比较呢??




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