A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dora 中级黑马   /  2014-3-4 23:58  /  1078 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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?
想不明白,请求解答

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
这个问题我也纠结很久。但我的猜想是当对象与基本数据类型进行比较的时候,应该是将Integer转换为int类型之后再进行比较。
也符合数据类型一一致的要求。
这也是我个人觉得,仅供参考。
回复 使用道具 举报
亲,有种设计模式叫享元设计模式的哦!
int类型的一些比较常用的数据,java中会事先将它们都封装好,当需要创建这些数据的对象类型时,直接将事先封装好的对象返回。 int类型中0~127都是这样的模式,也就是它们其实都是同一个对象。这样比较节约空间,多个引用共享一个对象,所以称为享元模式。

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  “==”运算符与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()判断的所引用对象的内容是否一致

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
==比较的是栈内存中的值是否相等,基本数据类型就是比较值
,你的意思也就是说基本数据类型进行“==”是进行值比较??那基本数据类型定义后会不会在内存中分配空间呢??如果分配为什么不是进行地址的比较呢??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马