为什么jvm每次我们使用new关键字创建字符串时都会创建新字符串对象 - java

如果jvm创建string pool进行内存优化,那么为什么每次我们使用new关键字创建字符串时,即使它存在于string pool中,它也会创建新的Object呢?

参考方案

...为什么每次我们使用new关键字创建字符串时,即使字符串池中存在Java,Java也会创建新的Object?

因为您明确告诉过! new运算符始终创建一个新对象。 JLS 15.9.4说:

“类实例创建表达式的值是对指定类的新创建对象的引用。每次评估表达式时,都会创建一个新对象。

根据记录,调用new String(String)几乎总是一个错误……但是在晦涩的情况下,它可能很有用。可以想象,您可能想要一个字符串,equals返回true==给出false。调用new String(String)将为您提供。

对于较旧版本的Java,substringtrim以及可能的其他String方法将为您提供一个与原始共享共享后备存储的字符串。在某些情况下,这可能会导致内存泄漏。例如,调用new String(str.trim())可以防止内存泄漏,但要创建经过修剪的字符串的新副本。 String(String)构造函数保证分配一个新的后备数组,并为您提供一个新的String对象。
substringtrim的这种行为在Java 7中已更改。

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java swing-事件触发后,我可以在选项卡上更改名称吗? - java

一,代码:tab_textArea_file.addTab(docLabel, null, scrollPane_textArea, null); 因此,情况是我有一个可供用户选择的文件列表。用户单击文件时,将读取文件的内容并将其加载到textArea中。 “ docLabel”(在上面的代码中)是应该更改为所选文件名的字符串,但并非如此。是否可以通过上面的…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…