equals和==

160 阅读2分钟

1 变量

基本类型(boolean,byte,char,short,int,long,float,double)只有==能比较两变量的值是否相等,没有equals方法。

2 对象

对象的equals方法和==一样,都是比较两个对象在内存中的地址是否相同,相同为true,不同为false。

放在 x.equals(y) 前面的x没实例化——报错,前面x有实例化,y无论有没有实例化——false

3 字符串string

==比较地址,.equals比较值

3.1 用String strx = “xxx(值)”赋值

str1 == str2 比较:

两个都有初始值且初始值相同——true**(地址相同,说明2个字符串对象指向同一个地址,因为两者的值相同,所以就用一个地址来放这个值(java节约资源的机制),然后让两个string对象都指向这个地址)**;其中一个没有赋初值(静态字符串)——false;初始值不同——false。

str1.equals(str2) 比较:

两个都有初值且相同——true;不相同——false(比较字符串的值相不相等);str1没有给初值——报错。

image-20211218123945541.png

3.2 用String strx = new String("xxx(值)")赋值

str3 == str4 比较:

两个无论有没有初始值,初始值相不相等都是false**(因为String对象地址不同,虽然两者的值所在地址是相同的,但是他们都有new 一个地址来存入 str,所以两个str指向的地址是不同的,先指向这个地址,这个地址再指向值所在地址,而比较的时候是比较这个两个str所指向的地址而不是值所在地址,所以地址不同,结果为false)**

str3.equals(str4)比较:

两个都有初始值且相同——true;不同——false(equals方法比较字符串的值);str3不给初值——报错。

image-20211218123807684.png

对象的equals方法跟==作用一样,只有字符串String的equals方法是比较值,因为String类继承了Object之后重写了里面的equals方法,将其重写为判断两个字符串的内容(值)是否一致,所以两个字符串一般用equals来判断内容。

所以,字符串String的== 比较地址,equals方法比较值