Tag: 字符串池

字符串池与concat一起使用时的行为有所不同?

String s1 = “Hello”.concat(“World”); String s3 = new String(“HelloWorld”); //Line-2 String s2 = s1.intern(); System.out.println(s1 == s2); //false System.out.println(s1 == s3); //false System.out.println(s2 == s3); //false 如果我删除了Line-2并比较了s1 == s2,它将返回true。 谁能解释一下Line-2之后字符串池中到底发生了什么? 什么是在堆中的每一行和常量池中发生的? 根据我的理解,s1将在常量池中创建“HelloWorld”。 但是仍然s1 == s2是假的?

如何检查字符串池内容?

有没有办法检查,目前字符串池中有哪些字符串。 我可以以编程方式列出池中存在的所有字符串吗? 要么 任何IDE都有这种插件吗?

创建字符串的几种方法之间的差异

下面显示了几种创建字符串的方法。 在注释的表达式后面添加问题。 String str = “test”; String str1 = new String(str); //Will it invoke the Constructor of String(String)? String str2 = new String(“test”);//Will it invoke the Constructor of String(String)? String str3 = str; //Which Constructor will it invoke? Or str3 only reference to str and “test” without being constructed? String str4 = “test”;//Which Constructor will […]

比较命令行参数引用返回false,而String数组返回true

目前我正在使用字符串操作,在做演示时我发现了一些不同的行为。 以下是我的代码。 public class HelloWorld{ public static void main(String []args){ String str1 = “Hello”; String str2 = “Hello”; String str3 = new String(“Hello”); String strArray[] = {“Hello”,”Hello”}; String strArray1[] = new String[] {“Hello”,”Hello”}; System.out.println(“str1==str2:: “+(str1==str2)); System.out.println(“str1==str3:: “+(str1==str3)); System.out.println(“strArray[0]==strArray[1]:: “+(strArray[0]==strArray[1])); System.out.println(“str1==strArray[1]:: “+(str1==strArray[1])); System.out.println(“strArray1[0]==strArray1[1]:: “+(strArray1[0]==strArray1[1])); System.out.println(“str1==strArray1[1]:: “+(str1==strArray1[1])); System.out.println(“args[0]==args[1]:: “+(args[0]==args[1])); } } 并且上面的代码是。 我正在运行代码传递命令行参数。 java HelloWorld Hello Hello […]

带有println的池中的字符串计数

我正在为OCA SE 7考试做准备,其中一些问题确实很棘手。 在我使用的其中一本书中,我发现了一个错误,所以我想确认以下内容,请… public static void main(String… args) { String autumn = new String(“autumn”); // line one System.out.println(“autumn” == “summer”); // line two } 执行println方法后,池中有多少个String对象? 我的理解是: – 第一行不会将字符串添加到池中 – 第二行创建“autumn”和“summer”并将它们添加到池中所以书中的正确答案是2。 但是,我也认为……因为我应该对考试问题产生偏执……也会创建字符串“false”并添加到池中…所以我认为3应该是正确的答案……还是会发生一些其他的黑魔法……默认情况下JVM已经将“真实”和“假”放入池中了……? 有人可以确认吗? 编辑:经过一些研究后,我发现在书中谈到“错误”并不公平; 作为一般提示:考试题目通常根据“以下代码”制定; 所以他们显然对简单的计算代码本身在本地做什么的简单计算感兴趣。 因此,范围不允许检查println(boolean b)实现或编译器优化。 很公平 :)