设为首页 加入收藏

TOP

深入理解Java:String(二)
2017-07-13 10:22:50 】 浏览:5624
Tags:深入 理解 Java String
bsp;  
//↑------------------------------------------------------over 
        /**
        * 情景三: 
        * 由于常量的值在编译的时候就被确定(优化)了。
        * 在这里,"ab"和"cd"都是常量,因此变量str3的值在编译时就可以确定。
        * 这行代码编译后的效果等同于: String str3 = "abcd";
       
*/ 
        String str1
= "ab" + "cd"//1个对象 
        String str11 = "abcd"
        System.
out.println("str1 = str11 :"+ (str1 == str11)); 
       
//↑------------------------------------------------------over 
        /**
        * 情景四: 
        * 局部变量str2,str3存储的是存储两个拘留字符串对象(intern字符串对象)的地址。
        * 
        * 第三行代码原理(str2+str3):
        * 运行期JVM首先会在堆中创建一个StringBuilder类,
        * 同时用str2指向的拘留字符串对象完成初始化,
        * 然后调用append方法完成对str3所指向的拘留字符串的合并,
        * 接着调用StringBuilder的toString()方法在堆中创建一个String对象,
        * 最后将刚生成的String对象的堆地址存放在局部变量str3中。
        * 
        * 而str5存储的是字符串池中"abcd"所对应的拘留字符串对象的地址。
        * str4与str5地址当然不一样了。
        * 
        * 内存中实际上有五个字符串对象:
        *      三个拘留字符串对象、一个String对象和一个StringBuilder对象。
       
*/ 
        String str2
= "ab"//1个对象 
        String str3 = "cd"//1个对象                                       
        String str4 = str2+str3;                                       
        String str5
= "abcd";   
        System.
out.println("str4 = str5 :" + (str4==str5)); // false 
       
//↑------------------------------------------------------over 
        /**
        * 情景五:
        *  JAVA编译器对string + 基本类型/常量 是当成常量表达式直接求值来优化的。
        *  运行期的两个string相加,会产生新的对象的,存储在堆(heap)中
       
*/ 
        String str6
= "b"
        String str7
= "a" + str6; 
        String str67
= "ab"
        System.
out.println("str7 = str67 :"+ (str7 == str67)); 
       
//↑str6为变量,在运行期才会被解析。 
        final String str8 = "b"
        String str9
= "a" + str8; 
        String str89
= "ab"
        System.
out.println("str9 = str89 :"+ (str9 == str89)); 
       
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 自动装箱与拆箱深入理解 下一篇String的原理与用法总结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目