Java中关于字符串特别有意思的事

先让我们看一组比较有意思的测试代码,在本次测试中我们分别定义了两个不同的字符串,但赋予他们相同的值,先不要看结果,先让我们猜猜两个字符串所指向的地址是否一样呢。(我们以哈希地址来间接的查看地址是否相同)

class test{
	String s1="1";
	String s2="2";
	public static void main(String[] args) {
		String s1="1";
		String s2="1";
		System.out.println(s1.hashCode());//输出s1的哈希地址
		System.out.println(s2.hashCode());//输出s2的哈希地址
		System.out.println(s1==s2);//判断是对象内存地址是否相等
	}
	
}

让我们看一下测试结果:
在这里插入图片描述
从图片上我们可以发现结果显示为true,这也就意味着是s1和s2都指向了同一内存块
当我们在此改变一下测试案例,将s1和s2的值改为不相同,让我们在此看下结果。

class test{
	String s1="1";
	String s2="2";
	public static void main(String[] args) {
		String s1="1";
		String s2="2";
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s1==s2);
	}
	
}

在这里插入图片描述
此时我们发现两个变量此时分别指向了不同内存。
让我们以String类的构造函数来初始化

class test{
	String s1="1";
	String s2="2";
	public static void main(String[] args) {
		String s1=new String("1");
		String s2=new String("1");
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s1==s2);
	}
	
}

结果测试:
在这里插入图片描述
此时我们发现两个对象的哈希地址相同,但结果却显示false。此时我们可以由flase得到的结论是两者指向的的内存地址是不相同的
那我们再次看下第一次测试和本次测试发现两次测试的的哈希地址均是相同的的,由此我们得到结论哈希地址并不能代表对象的内存地址,不具有唯一性
接下来看最后一组测试案例

class test{
	String s1="1";
	String s2="2";
	public static void main(String[] args) {
		String s1=new String("1");
		String s2=new String("2");
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
		System.out.println(s1==s2);
	}
	
}

测试结果如下:
在这里插入图片描述
由此我们可以得出结论,当我们采用字符串直接赋值时,当两个对象的内容相同时,将会指向统一内存地址,而当内容不同时,将分别指向两个不同的地址。当采用字符串的构造方法赋值时,无论内容是否相同,都不会指向统一内存地址。
如有错误,恳请指出。感谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值