日期:2014-05-20  浏览次数:20793 次

关于基本数据类型的问题
我面试的时候,考了这样一个问题 : 为什么int型的数据可以用==判断是否相等  
我查了一下 : == 比较的是内存中的地址,比较的是对象的句柄;
  equals()比较的是地址内的内容,比较的是对象.
但是我不知道关于int型的应该怎么理解。
麻烦各位给俺详细的讲解一下。

还有 equals()比较的是对象 这句话我也不太理解

------解决方案--------------------
探讨
equals()比较的是对象 这句话我也不太理解
简单理解.
String s =new String("aaa");
String s2 =new String("aaa");

s==s2 : false;
s.equals(s2) : true;

这就是它们的区别.

------解决方案--------------------
因为int是基本数据类型,我理解为:
内存区域:

int a = 2;
地址x
-----------
| a | 2 | 这是int型存储。
-----------

Object obj = new Object();
Object obj1 = obj;
地址m
-----------
| obj | n | 这是对象引用obj的存储。
-----------
-----------
| obj | n | 这是对象引用obj1的存储。
-----------
地址n
----------------
| new Object() | 这是对象的存储。
----------------

==判断的是XXXXX位置的值是否相等。
-----------
| |XXXXX|
-----------

------解决方案--------------------
楼主要知道基本数据类型、对象、地址的几个概念
== 比较的是内存中的地址,比较的是对象的句柄; 
对基本数据类型,内存地址存放的就是值,所以比较也就是值。
对对象,内存地址存放的是对象的引用,具体对象内容不在这个地址,具体对象内容在内存地址存放的值中对应的内存地址中。

equals()比较的是地址内的内容,比较的是对象. 
equals比较的时候会根据对象的引用找到对象的内容进行比较。