Kev*_*hva 2 java string compare
我正在探索String Constant Pool和Heap内存.
if("String".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
Run Code Online (Sandbox Code Playgroud)
产量
Equal
Run Code Online (Sandbox Code Playgroud)
如果我在修剪前在String中添加一个空格,它将给出Not Equal输出
if("String ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal");
Run Code Online (Sandbox Code Playgroud)
产量
Not Equal
Run Code Online (Sandbox Code Playgroud)
你能解释一下上面的情景吗?
我怎样才能看到堆内存和字符串常量池?
该(Java 8)的javadoc的String.trim()状态:
返回:一个字符串,其值为此字符串,删除了任何前导和尾随空格,如果没有前导或尾随空格,则为此字符串.
由于"String"没有前导或尾随空格,trim()因此返回"String"对象.
另一方面"String "有尾随空格,因此String返回一个不同的对象1.
BTW:它不被称为"字符串常量池".所有字符串都是常量(不可变).您可能正在讨论编译时常量表达式评估结果的所有字符串.但是,字符串池还可以包含通过String.intern()调用动态创建的字符串添加的字符串.正确的术语是"字符串池".
1 - 碰巧这个对象与表示对象的对象不同"String".但是,仔细阅读javadoc将会发现规范并不要求这样.在Java的不同(假设)版本中,该trim()方法可以返回"String"对象并仍然符合规范.