String比较为什么要用equals?用==的问题

很简单的问题,记录一下

下面的程序很简单吧?你能保证你说的结论都是正确的吗?运行验证下你的猜测。

public class T{
	public static void main(String[] args){
		String s1="a1";
		String s2="a1";
		String s3 = "a"+"1";
		String s4 = "a"+1;
		String s5 = "a"+Integer.parseInt("1");
		int i = 1;
		String s6 = "a"+i;
		System.out.println(s1==s2);
		System.out.println(s1==s3);
		System.out.println(s1==s4);
		System.out.println(s1==s5);
		System.out.println(s1==s6);
	}
}
结果有没有惊到你呢?

都知道String比较要用equals方法来比较其内容,用==比较的是两个对象的地址值,但上面的程序运行结果好像不是那么回事呢?

Java中String有常量池,如果已经存在,就不会再创建同样的字符串常量了(new的不算)

这样s1==s2就很好理解了,都指向常量池中同一个对象,地址当然一样了

s3和s4虽然+了一个不一样的值,但都是常量运算,编译期间就知道结果了,是一个定值,所以结果也指向了同一个常量池中的对象

s5不是也加了一个1吗,不是和s4一样的吗?结果为什么不同呢?加了一个1???真的是吗?确实是呀,没错,你看到的确实是,但我们的程序运行的,paseInt方法只有在运行后才可能知道结果,运行后计算结果,就需要给参与运算的数据分配存储空间,运算结果也要存起来,自然不是指向常量池里的那个对象了(理解的如有错误还请指正)

s6与s5类似,只有在运行时才能确定具体的值

public class T{
	public static void main(String[] args){
		String s1="a1";
		String s2="a1";
		String s3 = "a"+"1";
		String s4 = "a"+1;
		String s5 = "a"+Integer.parseInt("1");
		int i = 1;
		String s6 = "a"+i;
		System.out.println(s1==s2);//true  很好理解,常量池
		System.out.println(s1==s3);//true  还能理解,常量运算,值确定
		System.out.println(s1==s4);//true  同上
		System.out.println(s1==s5);//false 有点难以理解吧,这不跟上面一样吗?
						//还真不一样,因为调用方法后的值只有在运行后才能确定
		System.out.println(s1==s6);//false 解释上面,这样就好理解了
						//不确定的值运算要存储结果吧,
						//所以就分配空间了,与最上面true的情况就不同了
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值