Java中的“==”和equals()

1.“==”:A:比较基本类型:比较值

     B:比较引用类型:比较对象的地址值

2.equals():只能比较引用类型,在Object类中有该方法的定义,其作用是比较两对象的地址。但是比较地址值并没有实际意义,而且Object是所有类的父类,被所有类继承,一般在调用的时候都会重写该方法,比如在String类中,被重写为boolean equals(Object anObject),返回的是布尔类型。

分析如下代码并加强对引用类型的比较的理解

public class EqualsTest {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hello";
		String s3 = "world";
		String s4 = new String("abc");
		String s5 = new String();
		String s6 = s5;
		
		System.out.println(s4);//abc
		System.out.println(s5);//空字符串
		
		System.out.println(s1 == s2);//true
		System.out.println(s1 == s3);//false
		System.out.println(s4 == s5);//false
		System.out.println(s5 == s6);//true
		System.out.println(s1.equals(s2));//true
		System.out.println(s4.equals(s5));//false
		System.out.println(s5.equals(s6));//true

	}
}

s1 s2 s3都是直接赋了字符常量,字符常量被存储在方法区的常量池中,栈中的变量直接指向对应常量池中的存放对应字符串的空间,"hello"和"world"在常量池中都只有一个空间,s1和s2指向相同的地址,返回true,同理s1 == s3则返回false。

s4和s5都new了一个String对象存储在堆中,利用String类的构造器进行初始化,s4中存放abc,s5中为空字符串,这两种不同的构造器也是方法的重载的体现。s4和s5各自new了一个对象,那么s4和s5指向堆中不同的空间,两个对象的地址值当然不一样了,返回false。把s5赋给s6,s6和s5的指向相同,所以s5 == s6返回true。

因为是创建String类型的变量,调的方法就是String类中的equals()方法,比较的是内容,最后三条输出语句就可以解释了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值