Java 什么时候实习?
我试着用Java 什么时候实习?,java,Java,我试着用.equals()方法和等号符号(=)比较两个字符串。但有时,他们两人给出了相同的答案。如何解决此问题?关于插入字符串,基本上需要了解两件事: 从中加载的字符串被插入 当调用该方法时,字符串被插入 不过,还有几点更为重要: 编译时常量字符串的串联也是一个编译时常量,因此,例如“foo”+“bar”的结果就是(插入的)常量字符串“foobar” intern()方法插入一个副本,并返回该副本。原始字符串不会添加到“内部字符串池” 无法对插入的字符串进行垃圾收集。如果你实习字符串,你实
.equals()
方法和等号符号(=)
比较两个字符串。但有时,他们两人给出了相同的答案。如何解决此问题?关于插入字符串,基本上需要了解两件事:
- 从中加载的字符串被插入
- 当调用该方法时,字符串被插入
- 编译时常量字符串的串联也是一个编译时常量,因此,例如
的结果就是(插入的)常量字符串“foo”+“bar”
“foobar”
方法插入一个副本,并返回该副本。原始字符串不会添加到“内部字符串池”intern()
- 无法对插入的字符串进行垃圾收集。如果你实习字符串,你实际上没有使用你正在泄漏内存
- 从中加载的字符串被插入
- 当调用该方法时,字符串被插入
- 编译时常量字符串的串联也是一个编译时常量,因此,例如
的结果就是(插入的)常量字符串“foo”+“bar”
“foobar”
方法插入一个副本,并返回该副本。原始字符串不会添加到“内部字符串池”intern()
- 无法对插入的字符串进行垃圾收集。如果你实习字符串,你实际上没有使用你正在泄漏内存
=
进行比较,看它们是否是完全相同的对象。使用.equals
(受支持时)进行比较,查看对象是否具有相同的值。(很明显,如果两个对象与==
比较相等,那么它们将与.equals
相等)如果您从两个对象引用的=
比较中获得true
,这意味着引用指向完全相同的对象。这可能是偶然的,也可能是有意的,具体取决于字符串对象的创建和处理方式。只是不要将字符串与==进行比较有什么问题?即使我想比较引用相等,答案也不应该相同。但是为什么我会得到相同的答案呢?将任意两个对象与=
进行比较,看它们是否是完全相同的对象。使用.equals
(受支持时)进行比较,查看对象是否具有相同的值。(很明显,如果两个对象与==
比较相等,那么它们将与.equals
相等)如果您从两个对象引用的=
比较中获得true
,这意味着引用指向完全相同的对象。这可能是偶然发生的,也可能是有意发生在字符串对象上的,具体取决于它们的创建和处理方式。是否有类似自动字符串插入的功能?@Ashima-文字字符串会自动插入。从许多JDK方法返回的字符串,如Class.getName()将被自动插入。插入的字符串应该被垃圾收集,尽管它们不在Java 1.1ish中。@TomHawtin-tackline-这很有趣,你对此有参考吗?@Joni-它们很难GC。我不会对它们不在1.1中感到惊讶,因为类没有GCed,其他一些东西也没有。有没有像自动字符串实习这样的东西?@Ashima-文字字符串是自动实习的。从许多JDK方法返回的字符串,如Class.getName()将被自动插入。插入的字符串应该被垃圾收集,尽管它们不在Java 1.1ish中。@TomHawtin-tackline-这很有趣,你对此有参考吗?@Joni-它们很难GC。我不会对它们不在1.1中感到惊讶,因为课程不是GCD,其他一些东西也不是。