Java中==与equals()区别

时间:2022-03-04 16:10:10

变量的比较(primitive主数据类型或引用)

primitive主数据类型包括八种:

byte,short,int,long,(4)     float,double,(2)boolean, (1) char,(1)

有时你需要知道两个primitive主数据类型是否相等,很简单,只需要使用==这个运算符就可以了。有时你想要知道两个引用变量是否引用到堆上的同一个对象。这也很容易,也是使用==运算符。

例如比较int q=4;int z=4;q==z,   int是主数据类型,适用==处理

但有时你又需要知道两个对象是否都真的相等,此时你就得使用equals()这个方法。

例如比较String m ="4";String n ="4";m.equals(n),     String不是主数据类型,做对象处理

相等的意义要视对象的类型而定。举例来说,如果两个不同的String带有相同的字符,他们在涵义上是相等的。但对于Dog对象来说,你认为尺寸大小或名字一样的Dog是相等的吗?所以说是否被视为相等要看对象的类型而定。

==只用来比对两个变量的字节组合,字节组合要么相等,要么不相等。

以下举例说明:

使用==来比对primitive主数据类型

这个运算符可以用来比较任何类型的两个变量,它只是比较其中的字节组合。

int a = 3;

byte b = 3;

if(a==b){  //true  } 

使用==来判别两个引用是否都指向同一对象。

要记得,这只是比较字节组合的模样。此规则适用于引用于primitive主数据类型。因此==运算符对参照相同对象的引用变量会返回值。在此情况下我们还是无法得知字节组合的样式,但可以确定的是所参照的相同的对象。

Foo a = new Foo();

Foo b = new Foo();

Foo c = a;

if(a==b){  //false}

if(a==c){  //true}

if(c==b){  //false}

总结:适用==来比较两个primivite主数据类型,或者判断两个引用是否引用同一个对象

适用equals()来判断两个对象是否在意义上相等。

(像是两个String对象是否带有相同字节组合)