字符串拼接

    技术2022-07-13  63

    String s1 = "abc"; String s2 = new String("abc"); //System.out.println(s1 == s2); //s2在堆中 //在JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中; //在JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了。 String s3 = "你好吗"; String s4 = "你"; String s5 = "好吗"; //System.out.println(s3 == (s4 + s5));//false //字符串变量相加底层调用StringBuilder的apped方法的进行拼接的,所以s4+s5最终会形成一个StringBuilder对象 //s3在字符串常量池中,所以拿常量池中的字符串地址和堆中的StringBuilder的地址比较结果为false //System.out.println(s3 == ("你" + "好吗"));//true //双引号的字符串相加,结果是存储在字符串常量池中的,s3的数据也在字符串常量池中,两个数据内容相同就会采用同一份儿 //小括号的("你" + "好吗")不会产生新的字符串,而会采用s3的数据,所以结果为true
    Processed: 0.013, SQL: 9