• 创建了几个String对象?


    String str = "a";

    1个,在常量池中创建了一个字符串对象。

    String str = new String("a");

    2个,在常量池中创建了一个字符串对象"a",在堆中开辟了一个空间又放了一个"a"。

    String str = "a"+"b";

    1个,在编译期,jvm将"a"+"b"自动识别成"ab",因此只创建了一个对象,放在常量池中。

    String a="a";//创建一个
    String b="b";//创建一个
    String ab1 = a+b;//创建一个
    String ab2= a+b;//创建一个

    4个,第三和第四行,各创建了一个对象,因为对于编译器来说,创建ab1和ab2时候,a和b的值被当做是不确定的,所以各自开辟空间创建对象

    final String a="a";//创建一个放常量池
    final String b="b";//创建一个放常量池
    String ab0=a+b;//创建一个放常量池
    String ab1=a+"b";//不再创建
    String ab2 = "ab";//不再创建

    3个,在String前边加个final,后边再用这个对象的时候,对编译器来说a的值是确定的,和"a"是一个东西都是“字面常量字符串”。

    以下转自:http://blog.csdn.net/s1491695565/article/details/51833579

    //此时str1与str2相当于变量,而不是常,因为块是在运行时才能确定,在编译时不能确定  
    final static String str1;    
        final static String str2;    
        static {    
            str1 ="aaa";    
            str2 ="bbb";    
        }  
        public static void main(String[] args){    
            String str3 = str1 + str2;  
            String str4 ="aaabbb";    
            System.out.println(str3==str4);   //输出为false  
        }    
    String str=" ";与String str=new String();  
    str=" "会放入池中,但new String()不会放入池中。 

    String的intern()方法 
    “当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串;否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true”,这是jdk文档原文注解。

  • 相关阅读:
    NJUPT_Wrj 个人训练实录
    图片保存本地,上传阿里云,保存该图片 在阿里云的 路径 到 本地数据库
    微信所有国家列表
    YII load()
    ab命令压力测试
    fatal: Could not read from remote repository
    JS获取URL中参数值的4种方法
    yii 生成 模型
    php子类是否自动调用父类构造函数
    自己实现一个简化版的SpringMVC框架
  • 原文地址:https://www.cnblogs.com/flying607/p/6518805.html
Copyright © 2020-2023  润新知