java里面如何判断两个引用是否指向同一个值?

kiroa 2011-12-29 12:42:30
求各位大大解答一下小菜鸟的疑问,感激不尽
...全文
985 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cactus_hxk 2011-12-29
  • 打赏
  • 举报
回复
其实lz是想问==和equals的区别吧
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量本身也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是一个内存,此时,变量所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的
sunyiz 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 arvon009 的回复:]

==和hashcode都可以
[/Quote]

楼上的说 hashcode 的不要误导别人
hashcode :
只要求相同对象的 hashcode 一样
并不保证不同对象的 hashcode 不一样
即,有可能不同对象的 hashcode 是一样的
龙四 2011-12-29
  • 打赏
  • 举报
回复
System.out.println("buzzards".hashCode() == "righto".hashCode());
System.out.println("hierarch".hashCode() == "crinolines".hashCode());


[Quote=引用 8 楼 arvon009 的回复:]

==和hashcode都可以
[/Quote]
sunyiz 2011-12-29
  • 打赏
  • 举报
回复
1楼正解,== 即可
梦未央 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ticmy 的回复:]
直接用==判断下即可

Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj1;

System.out.println(obj1 == obj2);
System.out.println(obj1 == obj3);
[/Quote]

正解,还可以使用hashcode也可以,地址相同即是引用相同
arvon009 2011-12-29
  • 打赏
  • 举报
回复
==和hashcode都可以
funfenffun 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoujiaolongde 的回复:]

hashcode 是不是也可以直观看出是不是一个地址
[/Quote]
不可以哦,同一个引用的hashcode在极大多数情况应该是相同的,而值不同或者值相同但不是同一个引用的hashcode也可能是相同的,所以不能用来看地址

lz直接输出对象,如果没有重载toString和hashcode方法的话,
System.out.println(obj1);
System.out.println(obj2);
会发现@符号后面带的地址是一样的
fmowker 2011-12-29
  • 打赏
  • 举报
回复
恩,这样就可以了
[Quote=引用 1 楼 ticmy 的回复:]

直接用==判断下即可

Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj1;

System.out.println(obj1 == obj2);
System.out.println(obj1 == obj3);
[/Quote]

--------------------
http://www.qinglobo.com/qklist-5.htm
密码测试 2011-12-29
  • 打赏
  • 举报
回复
1楼正解。具体说就是obj1、obj2、obj3都是指向具体对象的地址,如果他们指向同一个对象,那么地址必然相同。用"=="直接比较久可以了。
西部流云 2011-12-29
  • 打赏
  • 举报
回复
1楼正解
zhoujiaolongde 2011-12-29
  • 打赏
  • 举报
回复
hashcode 是不是也可以直观看出是不是一个地址
  • 打赏
  • 举报
回复
是不是引用同一个值用 ==判断就行了,1楼连例子都给出了
龙四 2011-12-29
  • 打赏
  • 举报
回复
直接用==判断下即可

Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj1;

System.out.println(obj1 == obj2);
System.out.println(obj1 == obj3);
收租的流氓汉 2011-12-29
  • 打赏
  • 举报
回复


1楼正解,== 即可

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧