gpt4 book ai didi

java - 为什么trim()给我字符串常量池引用?

转载 作者:行者123 更新时间:2023-12-03 00:57:17 24 4
gpt4 key购买 nike

我正在探索字符串常量池和堆内存。

if("String".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");

输出

Equal

如果我在修剪之前在字符串中添加一个空格,它将给出不等于输出

if("String  ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");

输出

Not Equal

你能解释一下上面的场景吗?

如何查看堆内存和字符串常量池?

最佳答案

(Java 8)javadocs对于 String.trim() 状态:

Returns: A string whose value is this string, with any leading and trailing white space removed, or this string if it has no leading or trailing white space.

由于 "String" 没有前导或尾随空格,因此 trim() 返回 "String" 对象。

另一方面,"String " 具有尾随空格,因此返回不同的 String 对象1

顺便说一句:它不叫“字符串常量池”。所有字符串都是常量(不可变)。您可能正在谈论作为编译时常量表达式求值结果的所有字符串。但是,字符串池还可以包含通过动态创建的字符串调用 String.intern() 添加的字符串。正确的术语是“字符串池”。

<小时/>

1 - 该对象恰好与表示“String” 的对象不同。然而,仔细阅读 javadoc 将发现规范并不要求这种情况。在不同(假设的)Java 版本中,trim() 方法可以返回"String" 对象,并且仍然符合规范。

关于java - 为什么trim()给我字符串常量池引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44651646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com