String变量与String常量相加问题

String变量与String常量相加问题

public static void main(String[] args) {
	String MESSAGE = "taobao";
	String a = "tao" + "bao";
	String b = "tao";
	String c = "bao";
	String d = b+c;

	System.out.println(a == MESSAGE);
	System.out.println((b + c) == MESSAGE);
	System.out.println(a == MESSAGE);

true还是false傻傻分不清,答案在最后,先搞清原因


直接赋值而不是使用new关键字给字符串初始化,在编译时就将String对象放进字符串常量池中

taobao在字符串常量池已经存在,因此String a = “tao” + “bao”;执行后,a也指向常量池中该字符串,因此引用相同


Java对String变量的相加是通过StringBuilder实现的,先构造一个StringBuffer里面存放"tao",然后调用append()方法追加"bao",然后将值为"taobao"的StringBuffer通过toString()转化成String对象。此时会产生一个新的堆内存地址。

字符串常量相加,不会创建 StringBuilder 对象

很明显新返回的对象和MESSAGE不是指向同一个地方,返回的对象指向堆中String对象,MESSAGE指向常量区中字符串,即两者引用不同


true
false
false

你可能感兴趣的:(错题)