java equals和 的区别_java中equals和==的区别介绍

示例一、

代码如下

public class Demo {

public static void main(String args[]) {

String str="soka";

String str2 = "soka";

System.out.println("soka".equals(str));

System.out.println(str==str2);

}

}

输出结果:

true

true

显然equals比两者值是否相等,所以返回true;那么,第二个值真为true吗?明明两个不同变量啊!其实JVM对于

String的游戏规则是这样安排的:

以 String str=”soka”;形式赋值在java中叫直接量,它存储在常量池中而不是像new String(“soka”)一样放在压

缩堆中,以这种方式赋值后,如果第二次用类似方式声明赋值String str2=”soka”,它首先会在常量池中找“soka

”如果找到了,str也将指向”soka”这个引用。所以两者引用的同一个对象,示例中用==比较两个对象是否是同一个

引用,为true那就理所当然啦。

示例二、

代码如下

public class Demo {

public static void main(String args[]) {

String str=new String("soka");

String str2=new String("soka");

System.out.println("soka".equals(str));

System.out.println(str==str2);

}

}

输出结果:

true

false

str和str2的值显然相等,所以用equals比较为true;str和str2都以new的形式向内存申请了各自的空间,所以他俩属

于不同对象,第二条输出语句为false。

示例三、

代码如下

public class Demo {

public static void main(String args[]) {

StringBuffer sb = new StringBuffer("wel");

StringBuffer sb2 = sb;

sb2 = sb2.append("come");

System.out.println("sb的值:"+sb+"  sb2的值:"+sb2);//1

System.out.println(sb==sb2);//2

System.out.println("welcome".equals(sb2));//3

}

}

输出结果:

sb的值:welcome sb2的值:welcome

true

false

输出语句2为true大家没有疑问吧,因为sb和sb2的是同一引用。

从输出语句1可以看str2的变量值是”welcome”,那么输出语句3为什么是false呢?不急,我们先看Object基类中

equals方法的源码:

代码如下

boolean equals(Object o)

{

return this==o;

}

从源码可以看出,Object中equals方法比较的就是地址/引用。是的,在java中,StringBuffer类并没有重写equals方

法,所以输出语句3中的equals是单纯从Object继承过来的,输出语句3为false就不用质疑了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值