String变量与String常量相加问题

您所在的位置:网站首页 两个字符串相加创建了几个对象 String变量与String常量相加问题

String变量与String常量相加问题

2023-11-13 11:37| 来源: 网络整理| 查看: 265

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(d == MESSAGE);

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

首先要清楚的是,String是常量,String类是被final修饰的,String类中的字符数组也是被final修饰的。

public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[];

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

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

Java对String变量(引用)的相加是通过StringBuilder实现的,先构造一个StringBuilder里面存放"tao",然后调用append()方法追加"bao",然后将值为"taobao"的StringBuilder通过toString()转化成String对象。此时会产生一个新的堆内存地址。 可以通过编译后的class文件查看: String d = (new StringBulider()).append(b).append©.toString();

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

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

true false false


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3