Java 字符串常量池查询
连接s2中的两个字符串常量时,不会产生新的字符串对象(字符串对象仅在使用new或连接时使用类似s1的perm引用时创建)。请说明为什么o/p是假的 在s2中连接2个字符串常量不会产生新的字符串对象 当使用字符串连接运算符执行时,这是正确的,但这不是您在这里要做的。您正在手动调用Java 字符串常量池查询,java,string,constants,Java,String,Constants,连接s2中的两个字符串常量时,不会产生新的字符串对象(字符串对象仅在使用new或连接时使用类似s1的perm引用时创建)。请说明为什么o/p是假的 在s2中连接2个字符串常量不会产生新的字符串对象 当使用字符串连接运算符执行时,这是正确的,但这不是您在这里要做的。您正在手动调用String.concat,因此这不是一个常量表达式,也不是在编译时计算的 如果您使用: public class D2 { public static void main(String[] args) {
String.concat
,因此这不是一个常量表达式,也不是在编译时计算的
如果您使用:
public class D2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="java";
String s2="ja".concat("va");
System.out.println(s1==s2);
}
}
然后,编译器将执行串联,并且s1
和s2
将引用相同的对象
提供有关导致常量表达式的详细信息,其中不包括方法调用
在s2中连接2个字符串常量不会产生新的字符串对象
当使用字符串连接运算符执行时,这是正确的,但这不是您在这里要做的。您正在手动调用String.concat
,因此这不是一个常量表达式,也不是在编译时计算的
如果您使用:
public class D2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="java";
String s2="ja".concat("va");
System.out.println(s1==s2);
}
}
然后,编译器将执行串联,并且s1
和s2
将引用相同的对象
提供有关导致常量表达式的详细信息,其中不包括方法调用。
concat
会创建一个新的字符串。这可能是运行时语句,编译器在编译代码时无法判断运行时语句的结果,因此,新的“java”将是新字符串,而不是第一次从字符串池中得到的相同字符串。。我被复制了。concat
确实创建了一个新的字符串。这可能是运行时语句,编译器在编译代码时无法判断运行时语句的结果,因此,新的“java”将是新字符串,而不是第一次从字符串池中得到的相同字符串。。我被复制了。你是有史以来最快的JLS报价人。你是有史以来最快的JLS报价人。