string-pool

    1热度

    2回答

    我碰到一个问题就问的以下的输出: String s1 = "String 1"; String s2 = "String 2"; String s3 = s1 + s2; String s4 = "String 1" + "String 2"; System.out.println(s3==s4); 输出 - false 现在,由于字符串不是使用ne

    -3热度

    3回答

    Javadoc说如果在字符串池中有一个相等的String,那么intern()方法将返回String。 public class Demo { public static void main(String[] args) { String str1 = "Apple"; String str2 = new String("Apple"); System.out.p

    4热度

    2回答

    因此,当我偶然发现一个令人困惑的构造函数时,我正在阅读String类。该代码是这样 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */

    0热度

    1回答

    互联网上的很多文章指出,在多线程中使用String.intern()是坏的,但我真的不明白为什么它不好。使用String.intern()总是从字符串池中返回一个唯一的字符串,不是吗? 如果不是这样的话JVM字符串池线程是本地的吗?如果没有,那么为什么在多线程环境中使用String.intern()进行同步被认为是不好的?所以在下面的用例,也不会是解决同步问题: Method1 { synchr

    1热度

    3回答

    public static void main(String[] args) { String[] arr = new String[5]; for (int i = 0; i < arr.length; i++) { arr[i] = "aaa" + i; } System.out.println(arr[0] == "aaa0");

    0热度

    2回答

    我不确定运行时常量池的某些属性。 运行时常量池由来自常量池的数据填充(来自.class文件,在类加载期间)。但它是否也被运行时创建的变量填满了?或者在编译为文字时将它们转换并存储在常量池中? 例如: Integer i = new Integer(127); 被处理像字面,因为转换到的: Integer i = Integer.valueOf(127); 编译期间 ,并存储在常量池中的?

    1热度

    3回答

    具有下面的代码: String s="JAVA"; for(i=0; i<=100; i++) s=s+"JVM"; 创建多少字符串?我的猜测是,103个字符串创建: 1:字符串 “JVM” 也是在字符串池中 101:在字符串池中 1字符串 “JAVA” 的新的String s因为字符串是不可变的类

    0热度

    1回答

    字符串是不可变的,并在字符串池中进行管理。我想知道这个池是如何管理的。如果在应用程序中使用了大量的字符串字符串(我理解字符串生成器应该在像append,replace操作那样的修改时使用),那么Pool通过不重新重新创建新的String对象来增强应用程序的性能但使用池中存在的相同对象,这是可能的,因为字符串是不可变的,并且这样做没有不良影响。 我的问题是如何管理这String Pool。如果在某些

    0热度

    1回答

    Strings是不可变的对象并存储在字符串池中。假设在应用程序中没有任何字符串是使用new运算符创建的。在这种情况下,还需要使用equals方法,而不是对String对象相等性检查吗? 我觉得上述问题的答案可能是“是”,它与字符串池大小有关。 如何管理字符串池?内存有限,所以我觉得String pool也有一定的大小。它是否像LRU缓存一样工作,在池满时丢弃最少使用的字符串? 请提供您的宝贵意见。

    2热度

    1回答

    我尝试了一些东西象下面这样: String s1="test5"; String s2="test"+5; String s3="test"+s1.length(); System.out.println("s1==s2 "+(s1==s2)+" s2==s3 "+(s2==s3)+" s1==s3 "+ (s1==s3)); 输出是: s1==s2true s2==s3false s1