问题标签 [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.
java - 运行时常量池 - 被运行时创建的变量填满?
我不确定运行时常量池的某些属性。
运行时常量池,由常量池中的数据填充(来自 .class 文件,在类加载期间)。但它是否也被运行时创建的变量填充?还是在编译期间将它们转换为文字,并存储在常量池中?
例如:
被视为文字,因为转换为:
在编译期间,并存储在常量池中?
如果它不是那样工作,是否有运行时常量池的运行时机制?
第二个问题:我在很多文章中找到了这句话:“每个类都有Runtime constant pool”,但它是什么意思?是否有一个 RCP,包含(例如)整数类型的所有应用程序对象,或者每个类都有一个 RCP,包含该类中出现的所有常量对象?(例如:Person,得到年龄 = Integer(18),并且 isAdult = Boolean(true))。
java - Java如何检查字符串池中是否存在字符串?
我在 Stackoverflow 和其他网站上提到了一些关于 Java 字符串池的帖子。
所以,当我们这样做时:
它在字符串池中创建一个字符串对象。[假设我们从一个空字符串池开始]
现在,当我们这样做时,
java如何也将相同的对象引用分配给s2?
它是否遍历所有字符串池对象并比较值?我想应该有更好的方法来解决这个问题。
java - Java 行为中的字符串。字符串连接在运行时如何工作?
对于以下代码:
“temp”变量评估为“好”,与“bis”和“cis”相同,但 bis==temp 返回 false,而 bis==cis 评估为 true。请告诉我为什么会发生这种情况?在字符串池中存在“好”对象。因此,理想情况下,“临时”引用应该像 bis 和 cis 那样正确指向它?
java - 字符串连接时Java字符串池如何工作?
当心:我不想比较字符是否相等。因为我知道如何使用 String.equals() 方法。这个问题是关于字符串参考的
当我开始学习 String 类及其属性为不变性等时,我正在为 OCA 考试学习。根据我阅读或可能理解的关于字符串池的内容,当创建字符串时,Java 将此对象存储在他们调用的对象上字符串池,如果使用相同的值创建一个新字符串,它将引用字符串池中的字符串,除非我们使用new关键字,因为这会创建一个新的引用,即使两个字符串都包含相同的值。
例如:
要清楚这段代码的作用是在第一行代码中,它将创建String a = "foo"
并将其存储在字符串池中,在第二行代码中,它将创建String b
和引用,"foo"
因为它已经存在于字符串池中。但是第 3 行将创建这个字符串的新引用,无论它是否已经存在。这是一个关于正在发生的事情的小图形示例:
问题出现在以下代码行上。当通过连接创建字符串时,java 是否会做出不同的东西或简单的 == 比较器有另一种行为?
示例 A:
示例 B:
示例 C:
观看代码运行:( http://ideone.com/fdk6KL )
怎么了 ?
编辑
修复示例 B 的错误:
b = 'hel' + 'lo'
添加有关问题的说明。这不是比较问题,因为我知道问题的使用
String.equals()
在字符串池的引用上
java - 如何将字符串添加到字符串池
当引导类加载器从类文件加载一个类时,它会将包含在其常量池中的字符串添加到字符串池中。
但是,如果我构建自己的类加载器怎么办?如何要求将字符串文字添加到字符串池中?
我认为这不能String.intern()
回答我的问题,因为这样做,您已经需要一个字符串。
补充问题:谁负责字符串池?我可以在http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#intern%28%29读到String 类有一个字符串池:它是同一个? 是静态字段吗?
java - 直接添加和引用添加的字符串之间的区别
我遇到了一个问题,询问以下输出:
输出 -false
现在,由于字符串不是使用 new 运算符创建的,所以对象是在字符串池中创建的,所以按照我的理解s1 + s2
and"String 1" + "String 2"
应该是相等的,s3==s4
应该是true
.
但这并没有真正发生。任何人都可以解释一下吗?
java - 如何仅在堆上而不在字符串池中创建字符串对象?
我想在堆上创建一个字符串对象,我必须确保该对象不是在字符串池上创建的。
java - Java JDK如何在字符串池中创建新字符串
我了解到,当您使用字符串分配值时,它使用字符串池。所以,他们使用相同的地址
但是当我尝试执行以下操作时
并用 S1 检查地址...
为什么它返回false?为什么JDK不使用与S1或S2相同的地址?
谢谢!
java - 字符串常量池和堆中将创建多少个对象
以下代码将在字符串常量池和堆中创建多少对象:
据我所知,所有文字都是在字符串常量池中创建的,但是字符串 concat 运算符在内部使用 StringBuffer 来附加字符串,所以也会在堆中创建一个对象吗?
string - 在 Stringpool 中创建了多少个 String 对象?
考虑以下示例:
字符串 s1 "你好";
字符串 s2 = "世界";
字符串 s3 = s2 +s3;
在上面的例子中,Stringpool 中创建了多少个对象?字符串 s3 是添加到 Stringpool 还是它是堆内存中的单独对象,或者 JVM 是否在堆中创建新对象并将其添加到 stringpool?提前致谢 :)