== 和 equals

先直接问您们一个问题:

package cn.nuist.pers.day1;

public class Strlng {
public static void main(String[] args) {
	String s1 = "nb";
	String s2 = "nb";
	
	System.out.println(s1 == s2);
	System.out.println(s1.equals(s2));
}
}

输出结果是什么呢?

观众老爷:mdzz,这么简单的问题问我们?当然都是true啊!

啪啪啪!(厉害)

再问您们一个问题:

package cn.nuist.pers.day1;

public class Strlng {
public static void main(String[] args) {
	String s1 = new String("bn"); 
	String s2 = new String("bn"); 
	
	System.out.print(s1 == s2);
	System.out.println(s1.equals(s2));
}
}

这次呢?

观众老爷:false   true

好了,你们可以下山了!!!

 

我还是向您们好好学习一下这其中的原由吧!

第一道程序:

        当程序运行时会自动产生一个常量池,在运行到 String s1 = “nb”时,会在常量池中查找是否有“nb”这个字符串,若没有则创建一个字符串“nb”,若有(别急,我马上讲);当运行到String  s2 = "nb"时,会在常量池中查找是否有"nb"这个字符串,若没有,则创建;若是有,则用s2引用这个字符串!

        所以,s1,s2都是对"nb"这个字符串的引用,既然是引用,则s1,s2都是指向"nb"这个字符串,则s1 == s2,s1.equals(s2)。

第二道程序:

        用new String创建的字符串不是常量,所以他们不放在常量池中,他们有自己的内存地址空间。即s1,s2是两个不同的对象的引用,当调用==时,结果为false;当调用equals()时,结果为true。

 

那么,==和equals()的区别和用法是什么呢?

       是这样的(不谈常量),==比较的是两个对象是否是相同对象;而equals()?equals()分重写后和未重写两种情况,像我们一般在生活中遇到的equals()方法,一般都是重写过后的,所以用她来比较两个对象的时候就是比较两个对象的内容是否相同;而未重写equals()的极少数情况,equals()的底层则是调用的==,即比较两个对象是否是相同的对象!(这种情况是日常生活中不常见的情况!)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值