Java String s1 = "abc"和 String s1 = new String ("abc"之间有何不同?

标签 java

我正在阅读一些关于如何比较 Java 中字符串之间的相等性的注释。

String s1 = new String("abc");
String s2 = new String("abc");

这两个分配在不同的内存中,所以它们的引用是不同的。 当我们调用时

if (s1 == s2){ .. } // Comparing the reference, so return false
if(s1.equal(s2)){..} // Comparing content, so return true

那么,什么是

String s3 = "abc" String s4 = "abc"

内存是如何分配的,当我进行不同的相等检查时,会发生什么?

例如:

s3==s4
s3.equal(s4)
s3.equal(s1)

最佳答案

String s3 = "abc" String s4 = "abc"??

这些是文字。 String 文字存储在公共(public)池中(字符串的存储份额)

通过new运算符创建的字符串对象存储在堆中(不共享)。

s3==s4   //true 
s3.equals(s4) //true

了解更多:

How can a string be initialized using " "?

关于Java String s1 = "abc"和 String s1 = new String ("abc"之间有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19335338/

相关文章:

java - ssl_upgrade_error rabbitMQ

java - 创建了 Spring 单例类实例?

java - 为什么要分解不包括 spring-boot-starter-logging 的日志文件?

java - IncompatibleClassChangeError on Spring WAR deploy

java - 请解释 "x = x++;"中的++ 运算符发生了什么。增量在哪里完成?

java - 检查任意圆是否包含给定点集的 k 个以上点

java - 响应 http POST 以告诉客户端这是错误的输入

java - 验证 JTextField 中数据的最佳方法是什么?

java - 多节点行为

java - Talend tRest 连接重置向 https 端点发送请求时出错