JAVA笔记-String笔记(常量池)

来源:互联网 发布:云计算的案例 编辑:程序博客网 时间:2024/06/08 02:54

测试代码及注释如下:(仅供学习)

package day01;/** * 字符串在创建对象时,推荐使用字面量形式 * 创建。因为在使用字面量创建时,若创建内容 * 相同的字符串时会重用对象,减少内存开销。 * 由于内容相同的字符串会重用对象,所以java * 要求字符串对象是不变对象,即:字符串对象 * 一旦创建,内容不可改变。若要改变字符串内容 * 则会创建新对象。 * @author Administrator * */public class StringDemo1 {    public static void main(String[] args) {        /*         * 使用字面量形式创建字符串才会         * 重用对象         */        String s1 = "123abc";        String s2 = "123abc";        String s3 = "123abc";        System.out.println(s1==s2);//true        s1 = s1+"!";        System.out.println(s1);//123abc!        System.out.println(s2);//123abc        System.out.println(s1==s2);//false        String s4 = new String("123abc");//新建了对象        System.out.println(s2==s4);//false        /*         * 编译器在编译程序时,若发现一个         * 计算表达式计算符两边的内容都是         * 字面量,会直接进行计算,并将结果         * 编译到class文件中,所以下面代码         * 在class文件中的样子是:         * String s5 = "123abc";         */        String s5 = "123"+"abc";        System.out.println(s2==s5);//true        String s = "123";        String s6 = s+"abc";//变量s        System.out.println(s2==s6);//false        final String s7 = "123";        String s8 = s7 + "abc";        //因为因为s7是final的String,所以在编译时是可以确定的        //所以编译器会直接将s7替换成"123"> /*4.final修饰属性,当final变量是基本数据类型以及String类型时,> 如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。> */        System.out.println(s8 == s2);//true    }}
0 0
原创粉丝点击