zoukankan      html  css  js  c++  java
  • String和intern()浅析

    String a = new String("aa"),代表在堆内存中,创建了一个字符串对象,变量a指向该对象,而该对象又指向在常量池中的字符串常量。
    而String a = "aa"代表直接由变量a指向常量池中的字符串,省去了中间的堆内存中的对象,因为new对象时,都会在堆中创建对象。
    这就像如果有:
    String s1 = "hello"; 
    String s2 = "hello";
    那么
    System.out.println(s1==s2);
    结果为true,因为他们的地址值是一致的,都指向常量池中的字符串常量。

    String s1 = new String("hello");
    String s2 = new String("hello");
    System.out.println(s1==s2);
    结果则是false,因为他们都在堆中建立了对象,而对象之间的地址值不同

     

     

    intern 这个方法返回的是 返回字符串对象的规范化表示形式,当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。

     

     

    public class test{

    public static void main(String[] args) throws Exception {

    String s1 = new String( "ab123" ) ;
    String s2 = new String( "ab123" ) ;
    System.out.println( s1 == s2 ); //false

    String s3 = "ab123";
    String s4 = "ab123";
    System.out.println( s3 == s4 ); //true
    System.out.println( s3 == s2 ); //false

    String s5 = s1.intern() ;
    String s6 = s3.intern() ;
    System.out.println( s5 == s1 ) ; //false
    System.out.println( s5 == s3 ) ; //true

    System.out.println( s6 == s5 ) ; //true

    }
    }

  • 相关阅读:
    指针
    《算法图解》3
    《算法图解》2
    Python缩进
    linux_01_seq_shuf_sort
    centos yum 切换阿里源
    Python csv 跳过第一行 去除表头 读取文件内容
    C语言结构体内存分析
    shell csv导入mysql ERROR 1292 (22007) at line 1: Incorrect datetime value: '' for column 解决方案
    代码实现:数据结构之数组当中唯一的k个数 k=1,2
  • 原文地址:https://www.cnblogs.com/douyamv/p/6529043.html
Copyright © 2011-2022 走看看