问题标签 [string-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
669 浏览

java - 运行时常量池 - 被运行时创建的变量填满?

我不确定运行时常量池的某些属性。

运行时常量池,由常量池中的数据填充(来自 .class 文件,在类加载期间)。但它是否也被运行时创建的变量填充?还是在编译期间将它们转换为文字,并存储在常量池中?

例如:

被视为文字,因为转换为:

在编译期间,并存储在常量池中?

如果它不是那样工作,是否有运行时常量池的运行时机制?

第二个问题:我在很多文章中找到了这句话:“每个类都有Runtime constant pool”,但它是什么意思?是否有一个 RCP,包含(例如)整数类型的所有应用程序对象,或者每个类都有一个 RCP,包含该类中出现的所有常量对象?(例如:Person,得到年龄 = Integer(18),并且 isAdult = Boolean(true))。

0 投票
0 回答
203 浏览

java - Java如何检查字符串池中是否存在字符串?

我在 Stackoverflow 和其他网站上提到了一些关于 Java 字符串池的帖子。

所以,当我们这样做时:

它在字符串池中创建一个字符串对象。[假设我们从一个空字符串池开始]

现在,当我们这样做时,

java如何也将相同的对象引用分配给s2?

它是否遍历所有字符串池对象并比较值?我想应该有更好的方法来解决这个问题。

0 投票
0 回答
56 浏览

java - Java 行为中的字符串。字符串连接在运行时如何工作?

对于以下代码:

“temp”变量评估为“好”,与“bis”和“cis”相同,但 bis==temp 返回 false,而 bis==cis 评估为 true。请告诉我为什么会发生这种情况?在字符串池中存在“好”对象。因此,理想情况下,“临时”引用应该像 bis 和 cis 那样正确指向它?

0 投票
2 回答
4724 浏览

java - 字符串连接时Java字符串池如何工作?

当心:我不想比较字符是否相等。因为我知道如何使用 String.equals() 方法。这个问题是关于字符串参考的

当我开始学习 String 类及其属性为不变性等时,我正在为 OCA 考试学习。根据我阅读或可能理解的关于字符串池的内容,当创建字符串时,Java 将此对象存储在他们调用的对象上字符串池,如果使用相同的值创建一个新字符串,它将引用字符串池中的字符串,除非我们使用new关键字,因为这会创建一个新的引用,即使两个字符串都包含相同的值。

例如:

要清楚这段代码的作用是在第一行代码中,它将创建String a = "foo"并将其存储在字符串池中,在第二行代码中,它将创建String b和引用,"foo"因为它已经存在于字符串池中。但是第 3 行将创建这个字符串的新引用,无论它是否已经存在。这是一个关于正在发生的事情的小图形示例: http://cdn.journaldev.com/wp-content/uploads/2012/11/String-Pool-Java1.png

问题出现在以下代码行上。当通过连接创建字符串时,java 是否会做出不同的东西或简单的 == 比较器有另一种行为?

示例 A:

示例 B:

示例 C:

观看代码运行:( http://ideone.com/fdk6KL )

怎么了 ?

编辑

  1. 修复示例 B 的错误:b = 'hel' + 'lo'

  2. 添加有关问题的说明。这不是比较问题,因为我知道问题的使用String.equals()在字符串池的引用上

0 投票
2 回答
1165 浏览

java - 如何将字符串添加到字符串池

当引导类加载器从类文件加载一个类时,它会将包含在其常量池中的字符串添加到字符串池中。

但是,如果我构建自己的类加载器怎么办?如何要求将字符串文字添加到字符串池中?

我认为这不能String.intern()回答我的问题,因为这样做,您已经需要一个字符串。

补充问题:谁负责字符串池?我可以在http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#intern%28%29读到String 类有一个字符串池:它是同一个? 是静态字段吗?

0 投票
2 回答
52 浏览

java - 直接添加和引用添加的字符串之间的区别

我遇到了一个问题,询问以下输出:

输出 -false

现在,由于字符串不是使用 new 运算符创建的,所以对象是在字符串池中创建的,所以按照我的理解s1 + s2and"String 1" + "String 2"应该是相等的,s3==s4应该是true.

但这并没有真正发生。任何人都可以解释一下吗?

0 投票
1 回答
59 浏览

java - 如何仅在堆上而不在字符串池中创建字符串对象?

我想在堆上创建一个字符串对象,我必须确保该对象不是在字符串池上创建的。

0 投票
0 回答
61 浏览

java - Java JDK如何在字符串池中创建新字符串

我了解到,当您使用字符串分配值时,它使用字符串池。所以,他们使用相同的地址

但是当我尝试执行以下操作时

并用 S1 检查地址...

为什么它返回false?为什么JDK不使用与S1或S2相同的地址?

谢谢!

0 投票
2 回答
496 浏览

java - 字符串常量池和堆中将创建多少个对象

以下代码将在字符串常量池和堆中创建多少对象:

据我所知,所有文字都是在字符串常量池中创建的,但是字符串 concat 运算符在内部使用 StringBuffer 来附加字符串,所以也会在堆中创建一个对象吗?

0 投票
1 回答
53 浏览

string - 在 Stringpool 中创建了多少个 String 对象?

考虑以下示例:

字符串 s1 "你好";

字符串 s2 = "世界";

字符串 s3 = s2 +s3;

在上面的例子中,Stringpool 中创建了多少个对象?字符串 s3 是添加到 Stringpool 还是它是堆内存中的单独对象,或者 JVM 是否在堆中创建新对象并将其添加到 stringpool?提前致谢 :)