字符串是否相等案例s1==s3?

下列代码的运行结果是?

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

/*
 * Copyright (c) 2017, 2023, zxy.cn All rights reserved.
 *
 */
package cn.str;

/**
 * 

Description:

*

Class:

*

Powered by zxy On 2023/6/9 20:36

* * @author zxy [[email protected]] * @version 1.0 * @since 17 */ public class test { public static void main(String[] args) { String s1 = "abc";//记录串池中的地址值 String s2 = "ab"; String s3 = s2 + "c";//新new出来的对象 System.out.println(s1 == s3);//false } }

字符串是否相等案例s1==s3?_第1张图片

 字符串拼接的时候,如果有变量:

JDK8以前:系统底层会自动创建一个 StringBuilder 对象,然后再调用其 append 方法完成拼接

JDK8版本:系统会预估要字符串拼接之后的总大小,把要拼接的内容都放在数组中,此时也是产生一个新的字符串

下列代码的运行结果是?

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

/*
 * Copyright (c) 2017, 2023, zxy.cn All rights reserved.
 *
 */
package cn.str;

/**
 * 

Description:

*

Class:

*

Powered by zxy On 2023/6/9 20:48

* * @author zxy [[email protected]] * @version 1.0 * @since 17 */ public class test1 { public static void main(String[] args) { String s1 = "abc";//记录串池中的地址值 String s2 = "a" + "b" + "c";//复用串池中的字符串 System.out.println(s1 == s2);//true } }

字符串是否相等案例s1==s3?_第2张图片

在编译的时候,就会将"a" + "b" + "c"拼接为“abc"

拓展:

字符串拼接的底层原理

  • 如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串
  • 如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存

StringBuilder 提高效率原理图

  • 所有要拼接的内容都会往StringBuilder 中放,不会创建很多无用的空间,节约内存

你可能感兴趣的:(Java基础面试题,java,开发语言)