看JAVA api里关于String.intern()的注释里提到了常量池,常量池是个什么东东?
还有,没弄明白String.intern()到底起个什么作用?什么时候用?怎么用?

解决方案 »

  1.   

    String.intern()的用处在于
    如果a.equals(b),则一定有a.intern() == b.intern()它是返回这个字符串在常量池中的引用
    我是从来没有用过这个方法,个人觉得也不是经常有用
      

  2.   

    这句话的作用是 如果str在字符串池中 那么直接返回这个字符串的引用 若果没有 那么将该字符串拉到字符串池中 并返回引用
    String str1 = new String("123");
    String str2 = "123";

    String str3 = str1.intern();

    System.out.println((str1 == str2) +","+ (str3 == str2));


    String str4 = new String("234");
    String str5 = new String("234");

    String str6 = str4.intern();
    String str7 = str5.intern();

    System.out.println((str4 == str5) +","+ (str6 == str7));
      

  3.   

    常量池是个很重要的概念。我写了篇博客《String in Java》,应该对你有用。顺便做个广告,欢迎大家去扔砖头。
      

  4.   

    关于常量池可以看下http://edu.codepub.com/2009/1116/17703_2.php
    至于String.intern(),好像没用过嘿嘿,看了下API,是这样写的
    当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 
    它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。 
      

  5.   

    得到的是常量池的字符串,也就是说两个String对象只要值相等,intern()返回的值就相等
      

  6.   

    理解java常量池
    http://yiliner.javaeye.com/blog/207723
      

  7.   

    JVM运行的时候,将内存分为两个部分,一部分是堆,一部分是栈。堆中存放的是创建的对象,而栈中存放的是方法调用过程中的局部变量或引用。而设计Java字符串对象内存实现的时候,而堆中又开辟了一块很小的内存,称之为字符串常量池,专门用来存放特定的字符串对象。
    例如 String s1="yes i do!"
    现实查看字符串常量池中是否存在内容与"yes i do!"相同的字符串对象。
    若没有,则新创建一个包含该内容的字符串对象,并让引用变量指向该对象;若存在则引用直接指向该对象。
    而 public String intern()此方法将指定字符串对象在字符串常量池中对应对象的引用返回,若本身就在字符串常量池中,则直接将自己的引用返回,若该字符串在堆中,则返回字符串常量池中其联系对象的引用;