美文网首页
2018-07-24(一张图看懂String类型比较)

2018-07-24(一张图看懂String类型比较)

作者: MiaLing007 | 来源:发表于2018-07-24 17:50 被阅读0次

    先看代码

        public static void main(String[] args) {
            String s1 = new String("hello");
            String s2 = "hello";
            String s3 = "hello";
            
            System.out.println(s1 == s2);
            System.out.println(s1.equals(s2));
            System.out.println(s2 == s3);
        }
    

    运行结果:

    false
    true
    true
    

    分析虚拟机器中内存如下图


    2018-07-24(一张图看懂String类型比较)

    字符串存储于方法区的常量区,S2和S3都直接指向常量区地址,但是S1因为是new,会在堆中申请内存,堆中存储的是常量区字符串地址,S1指向堆中内存地址。

    再来看一段代码:

        public static void main(String[] args) {
            String s1 = "hello";
            String s2 = "world";
            String s3 = "helloworld";
            
            String s4 = s1 + s2;
            String s5 = "hello" + "world";
            
            System.out.println(s3 == s4);
            System.out.println(s3 == s5);
        }
    

    输出结果为:

    false
    true
    
    2018-07-24(一张图看懂String类型比较)

    使用new String("")方式创建字符串,会在堆中申请空间,而直接赋值的方式(String s="")创建字符串时,会直接去常量区找。
    这里的s4因为是两个变量相加,所以会当成一个新字符串。而s5会在编译时被优化为s5="helloworld"

    相关文章

      网友评论

          本文标题:2018-07-24(一张图看懂String类型比较)

          本文链接:https://www.haomeiwen.com/subject/sweymftx.html