关于 String对象 常量池 字符串常量

本文详细解释了Java中字符串比较的原理,包括字符串常量池的概念,以及如何使用intern()方法来实现字符串的比较。通过具体代码示例展示了不同创建字符串方式的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class a {

	public static void main(String[] args) {
		String a = "abc";
		String b = "abc";
		String c = new String("abc");
		String d = new String("abc");
		System.out.println(a==b);	//true
		System.out.println(a==c);	//false
		System.out.println(c==d);	//false
	}

}

a 与 b 是两个对象为什么会相等? 

a与b都是以字面量方式创建的字符串对象,由相同序列的字符组成的两个字符串属于同一对象,位于内存中的同一个位置。对象存在于常量池中,而① 通过 “+”相加得到的字符串对象 与 ② 通过 new关键字生成的字符串对象 ③需要输入的字符串对象  存在于堆中,不在常量池中。

a 与 c 为什么不相等?

在编译期间a 是字符串常量"abc"的地址,  而c是在 运行期间 通过new关键字创建,"abc"字符串作为String对象存储在内存中的一个独立位置,以new方式创建的字符串不会加入常量池

c 与 d 不相等是一定的,因为是两个对象。





public class a {

	public static void main(String[] args) {
		String a = "abc";
		String c = new String("abc");
		c = c.intern();
		System.out.println(a==c); //true
	
	}

}

此时 a 与 c 相等,intern()可以访问常量池,检查字符串池里是否存在"abc"这么一个字符串,如果存
在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值