美文网首页
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