[英]Java String generation at compile time or runtime
鉴于此代码:
if(somecondition) {
String one = "one";
//print one;
}
只有在该条件为真时才会生成此字符串?
感谢任何帮助。
编辑:
使用字符串池,可以肯定地说,无论条件如何,字符串one
都会被添加到池中。
那么,如果需要从对象解析变量,会发生什么?
说,
String hello = "Hello Mr " + user.firstName();
这将如何添加到字符串池中? 并且当它确实被添加到字符串池时,它不会正确地创建新的字符串文字(除非 user.firstName() 更改)。
该字符串在您键入时生成; 但是,为了让这个答案有意义,我们需要在应用程序的构建和启动过程中经历转换。
*.java
文件中。*.class
文件中。因此,根据您对希望使用的“创建”类型的定义,可以在多个位置“创建”它。
现在,在您的第一个示例中,使用字符串时并未实现 String 对象,而是使用*.class
文件时。 但是,在您输入方法之前,它不会被正在运行的程序引用。
最后,使用字符串池化,每次将要创建字符串时,都会搜索现有字符串池,如果找到匹配条目,则使用匹配条目而不是创建新字符串。 这以大量字符串搜索为代价减少了运行时中的字符串数量。
由于您的代码的详细信息,您有三个不同的字符串符合池化条件(“Hello Mr”, user.firstName()
的值,以及将它们组合在一起的字符串)。 “你好先生”将与类加载合并(假设正在完成合并)。 user.firstName()
的值会在最初创建返回值时发生。 生成的组合字符串将在分配之前(或来自池的引用,如果它已经存在于池中)被池化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.