美文网首页
浅谈String

浅谈String

作者: 吃货_ee62 | 来源:发表于2020-05-06 18:00 被阅读0次

    String 用于表示字符串,生成的时候有两种方式:

    1 .用双引号 String str1="god" ;

    \color{red}{注:}此方法生成的字符串,引用地址指向\color{blue}{字符串常量池}\color{green}{生成一个对象},先去字符串常量池中寻找是否有此字符串,若是有,则直接拿来引用,反之,存储此字符串在字符串常量池中。

    2.用String类的构造函数String str2=new String("god");

    \color{red}{注:}此方法生成的字符串,引用地址指向\color{blue}{堆}\color{green}{生成一个或者两个对象},先去字符串常量池中寻找是否有此字符串,若是有,则在字符串常量池中复制一个到堆(heap)中,则此方法生成的字符串生成一个对象,若是没有,就在字符串常量池和堆中创建此对象,而不是在堆中创建此对象复制到字符串常量池中,则此方法生成的字符串生成两个对象。

    \color{red}{String 是被final修饰的类,因为final修饰的类不能被继承,final类中的方法默认是final的,所以String} \color{red}{类不能被继承,并且它的成员方法都默认为final方法,String 对象创建后不可改变,String对象的任} \color{red}{何改变都不影响到原对象,相关的任何操作都会生成新的对象。(所以常量池中不会出现两个相同的字符串)}

    同一个字符串反复出现,如何节省内存空间的问题:
    1.7环境

    注: ==比较的是变量(栈)内存中存放的对象的内存地址,则比较的是 是否为相同对象;equal比较的是值是否相等

    当多次new一个相同的字符串的时候,(new String都是在堆上创建字符串对象),可以用String的intern()方法,str2.intern();调用intern(),编译器会将字符串(1.7后则是将在堆上的地址引用复制到常量池)添加到常量池中,并返回指向该\color{red}{常量池中的引用}。因常量池中不会出现两个相同的字符串,所以下次调用intern()的时候,直接返回\color{red}{常量池中的引用(堆地址)}

    则:

     //第一行
       String a="happy";
            //第二行
      String b=new String("happy");     
      a==b//返回 false
      a==b.intern() //返回 false
    //第一行
      String b=new String("happy");    
    //第二行
      String a="happy";
      str1==str2   //返回 false
      str1==str2.intern() //返回 true
    

    待续

    相关文章

      网友评论

          本文标题:浅谈String

          本文链接:https://www.haomeiwen.com/subject/zgpightx.html