判断String对象相等

本文通过代码,展示了String对象易弄错的对象相等性判断。由于String对象用到的频率非常多,所以在我们给String对象赋字符串字面量时,会优先重字符串常量池中查找,找到了则返回,找不到则重新创建一个,并将该对象放到常量池中!

但是如果我们使用的是new关键字来创建String对象则与String常量池没有任何关系,都会重新创建一个!

另外通过subString方法截取的字符串也是重新创建的对象。

但是String对象有一个方法intern()会将自身的字符串值去String常量池中用equals方法去找,找到了则返回池中的对象,否则就在池中创建一个 新的对象

public class StringTest {
	
	public static void main(String[] args){
		String str1="a";//首先会先去String常量池里面去找,找到了就使用常量池里面的对象,否则就新建一个
		String str2="a";//常量池中有了字符串“a”则返回该对象,不需要重新创建
		String str6=new String("a");//不管常量池中是否有该对象,都会重新创建
		String str3=str1+str2;//做字符串拼接时会创建新的对象
		String str7=str1+"";//哪怕equals相等,但是也重新创建了对象
		String str4=str3.substring(0,1);//字符串截取也是返回新的对象,并不是按equals到常量池中去找对象
		String str5=new String("a").intern();//创建新对象时首先会先去String常量池里面去找,找到了就使用常量池里面的对象,否则就新建一个放入池中
		System.out.println("str1==str2:"+(str1==str2));
		System.out.println("str1==str6:"+(str1==str6));
		System.out.println("str1:"+str1+ "  str4:"+str4+"  str1==str4:"+(str1==str4));
		System.out.println("str1==str5:"+(str1==str5));
		System.out.println("str1==str7:"+(str1==str7));
		
		String str8=new String("b").intern();//演示在常量池中找不到对象,则新建一个放入池中
		String str9="b";//常量池中已经有“b”字符串这个对象了,则直接使用池中这个对象
		System.out.println("str8==str9:"+(str8==str9));

		/*
		 * 结果如下
		 *  str1==str2:true
			str1==str6:false
			str1:a  str4:a  str1==str4:false
			str1==str5:false
			str1==str7:false
			str8==str9:true
		 */
	}
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值