变量的比较(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对象是否带有相同字节组合)