String x = "abc".toUpperCase();
String y = "abc";
String z = "ABC";
System.out.println(x == y); // returns false
System.out.println(x == z); // returns false
我原以为“abc”会将一个对象放入实习生池,而toUpperCase()似乎只是使用new关键字而不使用string.intern()。然而,事情并不像我预想的那样。x==y给了我一个假值。为什么“ABC”不被推入实习生池?我认为使用文字格式调用字符串-例如。“abc”-是否需要新字符串(“abc”)。实习生()自动?
为了澄清,我在这里假设您的问题的要点是比较x==z
-两个大写字符串-而不是x==y
,因为其中一个是大写,另一个是小写,这与实习无关。
JVMS 8 5.1规定:
string文本是对string类实例的引用,是从类或接口的二进制表示中的CONSTANT_String_info结构(§4.4.3)派生出来的。CONSTANT_String_info结构给出了构成字符串文本的Unicode代码点序列。
("a" + "b" + "c").intern() == "abc"
为了派生字符串文本,Java虚拟机将检查CONSTANT_String_info结构给出的代码点序列。
如果以前在包含与CONSTANT_String_info结构所给出的Unicode代码点序列相同的Unicode代码点序列的String类实例上调用了String.Indist方法,则字符串文字派生的结果是对String类的同一实例的引用。
否则,将创建一个String类的新实例,该实例包含CONSTANT_String_info结构给出的Unicode代码点序列;对该类实例的引用是字符串文字派生的结果。最后,调用新字符串实例的internet方法。
String a = "abc".toUpperCase().intern();
String b = "abc".toUpperCase();
String c = "ABC";
String d = "ABC";
System.out.println(a == b); // returns false
System.out.println(a == c); // returns true
System.out.println(b == c); // returns false
System.out.println(c == d); // returns true
据我了解 将创建两个对象- 一个在String常量池中(如果不在常量池中) 堆内存中的一个 虽然对于实际创建多少对象以及在何处创建对象,人们的理解并不多。 不管怎样,我有以下问题- 为什么在String类的java文档中没有提到要创建多少对象以及在哪里创建 编辑 java docs for方法显然谈到了常量池,但在中没有这样说。
本文向大家介绍浅析为什么a="abc" 不等于 a=new String("abc"),包括了浅析为什么a="abc" 不等于 a=new String("abc")的使用技巧和注意事项,需要的朋友参考一下 显而易见 但是为什么呢?看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串、布尔、null、undefined 属于原
描述 (Description) 字符类[^abc]匹配除a,b或c之外的任何字符。 例子 (Example) 以下示例显示了字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CharacterClassDemo { pri
描述 (Description) 字符类[abc]匹配a,b或c。 例子 (Example) 以下示例显示了字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CharacterClassDemo { private stat
全新的BT客户端ABC [Yet Another Bittorrent Client>,开一个可以下载多个BT,相信很多人已经找了好久,但是一直没有满意的吧?ABC是一个非常棒的单窗口BT客户端。稳定,占内存非 常小,速度快!新版修正一个Shad0w内核代码上的bug,修复一个字面上的错误,修复2个未翻译的单词,图标已经修复。
我在爪哇有一个字符串s=“abc”。什么是 s[0] 类型?它不是字符串类型吗? 我尝试用Java打印它,但它显示“表达式的类型必须是数组类型,但它解析为字符串”; 在此输入图像描述