【发布时间】:2015-06-14 08:56:38
【问题描述】:
为了了解如何创建和存储 String 对象,我尝试了以下程序,并看到了我查询的输出。有人可以帮忙吗?
package corejava.immutable;
public class StringTester {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "Omkar Patkar";
String s2 = "Omkar Patkar";
String s3 = "Omkar" + " Patkar";
String s4 = "Omkar";
String s5 = s4 +" Patkar";
String s6 = new String("Omkar Patkar");
System.out.println("Hashcode s1 = "+s1.hashCode());
System.out.println("Hashcode s2 = "+s2.hashCode());
System.out.println("Hashcode s3 = "+s3.hashCode());
System.out.println("Hashcode s4 = "+s4.hashCode());
System.out.println("Hashcode s5 = "+s5.hashCode());
System.out.println("Hashcode s6 = "+s6.hashCode());
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("Indentity Hashcode s1 = "+System.identityHashCode(s1));
System.out.println("Indentity Hashcode s2 = "+System.identityHashCode(s2));
System.out.println("Indentity Hashcode s3 = "+System.identityHashCode(s3));
System.out.println("Indentity Hashcode s4 = "+System.identityHashCode(s4));
System.out.println("Indentity Hashcode s5 = "+System.identityHashCode(s5));
System.out.println("Indentity Hashcode s6 = "+System.identityHashCode(s6));
System.out.println("Indentity Hashcode intern s6 = "+System.identityHashCode(s6.intern()));
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("s1 == s2 : - "+(s1 == s2));
System.out.println("s1 == s3 : - "+(s1 == s3));
System.out.println("s1 == s4 : - "+(s1 == s4));
System.out.println("s1 == s5 : - "+(s1 == s5));
System.out.println("s1 == s6 : - "+(s1 == s6));
System.out.println("\ns2 == s3 : - "+(s2 == s3));
System.out.println("s2 == s4 : - "+(s2 == s4));
System.out.println("s2 == s5 : - "+(s2 == s5));
System.out.println("s2 == s6 : - "+(s2 == s6));
System.out.println("\ns3 == s4 : - "+(s3 == s4));
System.out.println("s3 == s5 : - "+(s3 == s5));
System.out.println("s3 == s6 : - "+(s3 == s6));
System.out.println("\ns4 == s5 : - "+(s4 == s5));
System.out.println("s4 == s6 : - "+(s4 == s6));
System.out.println("\ns5 == s6 : - "+(s5 == s6));
System.out.println("\ns1 == s6.intern() : - "+(s1 == s6.intern()));
System.out.println("s2 == s6.intern() : - "+(s2 == s6.intern()));
System.out.println("s3 == s6.intern() : - "+(s3 == s6.intern()));
System.out.println("s4 == s6.intern() : - "+(s4 == s6.intern()));
System.out.println("s5 == s6.intern() : - "+(s5 == s6.intern()));
}
}
我会看到以下输出:-
Hashcode s1 = 2062602683
Hashcode s2 = 2062602683
Hashcode s3 = 2062602683
Hashcode s4 = 76311326
Hashcode s5 = 2062602683
Hashcode s6 = 2062602683
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Indentity Hashcode s1 = 4337374
Indentity Hashcode s2 = 4337374
Indentity Hashcode s3 = 4337374
Indentity Hashcode s4 = 18019860
Indentity Hashcode s5 = 31054905
Indentity Hashcode s6 = 605645
Indentity Hashcode intern s6 = 4337374
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
s1 == s2 : - true
s1 == s3 : - true
s1 == s4 : - false
s1 == s5 : - false
s1 == s6 : - false
s2 == s3 : - true
s2 == s4 : - false
s2 == s5 : - false
s2 == s6 : - false
s3 == s4 : - false
s3 == s5 : - false
s3 == s6 : - false
s4 == s5 : - false
s4 == s6 : - false
s5 == s6 : - false
s1 == s6.intern() : - true
s2 == s6.intern() : - true
s3 == s6.intern() : - true
s4 == s6.intern() : - false
s5 == s6.intern() : - false
s5、s6的身份hashcode和s1、s2、s3不一样……为什么会这样?
这些对象是在哪个内存区域创建的? ...对象图将有助于理解 ...
【问题讨论】:
-
所有字符串之间都应该有一个空格......所以它们的最终值应该是“Omkar Patkar”......s5和s6将包含像s1,s2和s3这样的空格...... . 但它们的身份哈希码与 s1、s2 和 s3 不同...为什么不同?
-
有很多关于字符串的问题,它们是如何创建和存储的,包括字符串池。您是否搜索并阅读过它们?
-
Tom ...抱歉,我看到了很多关于这个话题的链接......我很抱歉。下次我会注意的。
标签: java string memory-management immutability hashcode