当使用String s1="java";
andString s2=new String("java");
这两个都创建不同的String对象吗?我知道如果我使用String s3="java"
它使用s1的相同对象,但在s2的情况下也使用相同的对象吗?如果是这样,那么为什么StringBuffer sb=new StringBuffer("java");
使用不同的对象。因为如果我做System.out.println(sb.equals(s1));
它返回false;
我对等于方法的理解是,它比较两个引用是否引用同一个对象,除非我们重写了等于方法,如果我的理解是错的,请告诉我。
String s1="java";
此时,s1
指向String
对象。
String s2 = new String("java");
根据
文档,字符串已经覆盖了 equals
方法,以检查对象的内容。
因此< code>s1.equals(s2)将计算为< code>true,因为它们具有相同的内容。
Object.equals()
将检查两个对象是否相同。
你对等于方法的理解是错误的。它是 == 运算符执行您所描述的操作。
实现equal方法就是为了做到这一点(引自String类文档) :
“当且仅当参数不为空并且是表示与此对象相同字符序列的String对象时,结果为真。”
这两者是否都创建了不同的String对象
这里有两个方面。第一个是字符串文字的实习。在这两个语句中:
String s1 = "Hello";
String s2 = new String("Hello");
第一个将使用常量池中已经存在的字符串< code >“Hello”。如果不存在,它将在常量池中为< code >“Hello”创建一个条目(在这种情况下,可以说创建了一个对象)
在第二种情况下,您有两个字符串对象-第一个是字符串文字< code >“Hello”,它将从常量池中获取,然后第二个对象的创建是由于使用了< code>new关键字- new String(...)
肯定会创建一个新对象。所以:
s1 == s2; // This will return `false`
因为,s1 和 s2 引用了 2 个不同的字符串对象。
现在是你的第二个案例:
String s1 = "Hello";
StringBuffer sb = new StringBuffer("Hello");
在第二条语句中,您正在创建一个新的StringBuffer
对象。首先,StringBuffer
不是String
。其次,由于StringBuffer
类不会覆盖equals()
方法,所以当您调用equals
方法时,如下所示:
sb.equals(s1);
它将调用 Object#equals()
方法,该方法根据引用值进行比较。因此,它将返回 false,因为 sb
和 s1
指向 2 个不同的实例。
然而,如果你这样比较它们:
sb.toString().equals(s1);
那你现在就明白了。由于字符串
类已覆盖 equals()
方法,该方法根据内容进行比较。
另见:
问题内容: 我试图理解字符串比较与字符串比较的输出。需要明确的是,我拥有使用==和equals比较两个字符串的类。我试图将==和equals()的输出合并为字符串。equals()的输出会连续显示,但==的输出不会 连续显示。使用Java的装箱功能,将与字符串连接的布尔值联系起来。equals和==都返回布尔值。那么为什么会有这种差异呢?有人可以解释吗? 输出 更新:答案 如果不使用s1 == s
问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。
本文向大家介绍全面了解python字符串和字典,包括了全面了解python字符串和字典的使用技巧和注意事项,需要的朋友参考一下 很多序列的方法字符串同样适用, 但是,字符串是不可变的,所以一些试图改变字符串的方法是不可用的 1 字符串格式化 1)用元组或者字典格式化字符串 format = "hello,%s.s% enough for you?" values = ('world','Hot')
我的问题很简单。有什么区别-
问题内容: String s1 = “andrei”; String s2 = “andrei”; 提供以下代码,为什么第二个比较s2 == s3为true?s2.toString()返回的实际上是什么?实际位于哪里? 问题答案: 首先是无操作: 其次,对String常量进行了插值,因此s1和s2在幕后被更改为相同的String实例。
问题内容: 请帮我,java中的string.equals如何与null值一起使用?例外情况有问题吗?三种情况: 结果的价值是什么?我期望这个值: result1为true; result2为假; result3为假; 问题答案: 您不能使用解引用(。)来访问实例变量或在实例上调用方法(如果该实例为)。这样做会产生一个。 通常,使用您知道为非null的东西进行字符串比较。例如,。