当前位置: 首页 > 知识库问答 >
问题:

为什么字符串x=“abc”.touppercase()中的“abc”不包括在实习生池中?

范鸿
2023-03-14
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”)。实习生()自动?

共有1个答案

许安邦
2023-03-14

为了澄清,我在这里假设您的问题的要点是比较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

  • ABC

    全新的BT客户端ABC [Yet Another Bittorrent Client>,开一个可以下载多个BT,相信很多人已经找了好久,但是一直没有满意的吧?ABC是一个非常棒的单窗口BT客户端。稳定,占内存非 常小,速度快!新版修正一个Shad0w内核代码上的bug,修复一个字面上的错误,修复2个未翻译的单词,图标已经修复。

  • 我在爪哇有一个字符串s=“abc”。什么是 s[0] 类型?它不是字符串类型吗? 我尝试用Java打印它,但它显示“表达式的类型必须是数组类型,但它解析为字符串”; 在此输入图像描述