常量池与堆中放入String数据,比较大小

时间:2022-07-28
本文章向大家介绍常量池与堆中放入String数据,比较大小,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

面试题1

1.1代码

package Test;
/*
 * zt
 * 2020/7/30
 * 9:37
 *  面试题 false true
 */

public class Demo1 {
    public static void main(String[] args) {
        //常量池
        String s1 = "abc";
        //常量池
        String s2 = "xyz";
        //程序运行,不会放到常量池,放入堆
        String s3 = s1+s2;
        //常量池
        String s4 = "abc" + "xyz";
        //常量池
        String s5 = "abcxyz";
        System.out.println(s3==s4);
        System.out.println(s4==s5);
    }
}

1.2运行结果

 false 
 true

1.3.图解

1.3.1运行文件

1.3.2存储位置图解

2.面试题2

2.1代码

package Test;
/*
 * zt
 * 2020/7/30
 * 9:37
 *  面试题 false true
 */

public class Demo1 {
    public static void main(String[] args) {
        //常量池
        String s1 = "abc";
        //常量池
        String s2 = "xyz";
        //程序运行,不会放到常量池,放入堆
        String s3 = s1+s2;
        //常量池
//        String s4 = "abc" + "xyz";
//        intern();重用,如果常量池没有将对象复制一份(或者引用)
//        如果常量池存在,直接返回
//        JDK1.7之前是复制一份放入常量池,之后(包括JDK1.7)把对象引用赋值到常量池
        String s4 = s3.intern();
        //常量池
        String s5 = "abcxyz";
        System.out.println(s3==s4);
        System.out.println(s4==s5);
    }
}

2.2运行结果

true
true

2.2.1图解

3.特殊

java 还有一些…在常量池本来就有,所以不需要intern()再复制地址过来。

所以运行结果: false