java 中的==和equals

     在java中都经常遇到过==和equals之间的比较,下面说一下我对两个之间比较的浅显的看法

   综述: java中变量的类型分为基本数据类型和引用类型,它们在用==和equals的时候比较的内容是不一样的。

   1.==比较的是值,它可以用作比较基本数据类型和引用类型的变量,对于基本类型它比较的是值是否相等,而对于引       用类型的变量它们比较的是所指向对象的地址是否相同。

   2.equal:用于比较引用型变量所指向的地址的内容是否相同,不能用于比较基本数据类型。

   

// ==和equals
public class Demo01 {
	public static void main(String[] args) {
		// ==用于基本数据类型的比较
		int n = 1;
		int m = 1;

		System.out.println(n == m);

		String str = new String("hello");
		String str1 = new String("hello");
		String str2 = new String("hello");

		// ==用于引用类型的比较
		System.out.println(str1 == str2);
		// equals用于引用类型的地址指向值比较
		System.out.println(str1.equals(str2));
		str1 = str;
		str2 = str;

		System.out.println(str1 == str2);
        
		//注意
		String s1 = "a";
		String s2 = "a";
		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
	}
}

true
false
true
true
true
true



扩:在上面例子中注意最后一个,当你new str/str1/str2的时候它们都在堆中分配了一段内存空间去存放你所要初始化的值。str/str1/str2都是一个新的对象它们指向的地址都是不同的,而你s1=a和s2=a的时候就并不一样了,当我们执行

"String s1 = "a" "(只是针对我的这段代码),首先jvm会到常量池中去寻a这个值,如果没有就在常量池中创建一个值a,然s1的指向这个a,然后执行 String s2 = "a"; jvm在常量池中找到了值a,就不会创建a这个值,直接将s2指向a,这样他们的值和地址就都是相同的。


如有问题之处,还望多多指教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值