黑马程序员技术交流社区
标题:
关于“==”是引用比较还是值比较?
[打印本页]
作者:
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
/*
在jdk1.5后引入了自动装箱与自动拆箱,当你代码中的e和f比较的时候,jdk会自动把两者转换成同一类型来比较。f会自动拆箱成int型,==比较的是栈内存中的值是否相等,基本数据类型就是比较值,引用数据类型则比较栈中引用的地址。int型的e和f是直接比较值是否相等。
所以返回为true*/
public class TestDemo {
public static void main(String args[]){
int e = 1;
Integer f = new Integer(1);
System.out.println(e==f);
}
}
复制代码
作者:
love~陌
时间:
2014-3-5 15:43
“==”运算符与equals()方法的区别
前者用于比较两个引用数据类型的变量的值是否相等,
后者用于比较两个引用变量所指向的对象的内容是否一样
举个例子吧
class YDemo
{
public static void main(String[] args)
{
Integer x=new Integer(1);
Integer y=new Integer(1);
Integer z=x;
if (x==z)
{
sop("true");
}
else
sop("false");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
输出结果为true
因为x和z都指向同一个地址值的对象
若判断条件是x==y的话,那么输出结果为false,因为二者的地址值是不一样的
若是判断条件为x.equals(y)的话,那么输出结果是true,equals()判断的所引用对象的内容是否一致
作者:
絮缘小默
时间:
2014-3-5 18:06
==比较的是栈内存中的值是否相等,基本数据类型就是比较值
,你的意思也就是说基本数据类型进行“==”是进行值比较??那基本数据类型定义后会不会在内存中分配空间呢??如果分配为什么不是进行地址的比较呢??
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2