JAVA基础面试题——String连接机制


一、java面试题——String连接机制(1)

代码如下(示例):

public class Demo1Scanner {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 + "c";
        System.out.println(s1 = s3);
    }
}

以上代码的运行结果是false。

因为当字符串之间使用+号连接时,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成连接,连接后,再调用其toString方法转换为String类型。

s1是在字符串常量池,s3是在堆内存的,两者地址不一样所以结果是false。

二、java面试题——String连接机制(2)

代码如下(示例):

public class Demo1Scanner {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a"+"b"+"c";
        System.out.println(s1 = s2);
    }
}

以上代码的运行结果是true。

是因为JAVA存在常量优化机制,在编译时,就会将"a"+“b”+“c"拼接成"abc”。

s1是在字符串常量池,s2是也是在常量池,两者一致。

注意:JAVA中当双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在,存在就直接使用,不存在就创建。所以以此方法创建的相同字符串常量,地址对比也相同

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值