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,其他一些东西也不是。