zoukankan      html  css  js  c++  java
  • 创建了几个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文档原文注解。

  • 相关阅读:
    SpringBoot--日期格式化
    SpringBoot--使用redis实现分布式限流
    SpringBoot--集成Shiro
    xxl-job搭建、部署、SpringBoot集成xxl-job
    SpringBoot--使用socket搭建聊天室
    SpringBoot--数据库管理与迁移(LiquiBase)
    SpringBoot--防止重复提交(锁机制---本地锁、分布式锁)
    Springboot--元注解及自定义注解(表单验证)
    java类对象的初始化顺序
    java23种设计模式(三)单例模式
  • 原文地址:https://www.cnblogs.com/flying607/p/6518805.html
Copyright © 2011-2022 走看看