String s = new String("Abc");
StringBuilder s1 = new StringBuilder("Abc");
System.out.println(s.equals(s1));
输出:false
为什么?有人能解释一下吗?
Java提供了StringBuffer和String类,String类用于处理无法更改的字符串。简单地说,String类型的对象是只读且不可变的。StringBuffer类用于表示可以修改的字符。
在这种情况下,当你有:
String s = new String("Abc");
StringBuilder s1 = new StringBuilder("Abc");
System.out.println(s.equals(s1));
给出false
,因为在StringBuffer类中equals
方法不会像在String类中那样被重写。因此,首先需要将其转换为字符串,然后使用equals方法,如下所示:
s.equals(s1.toString()) gives `true`
一个String
不是一个StringBuilder
,那么为什么你期望它们是相等的呢?
s.equals(s1.toString())
将返回true,因为这将是两个String
s的比较。
字符串
的等于
实现为:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
...
}
return false;
}
当对象
不是字符串
的实例时(并且只有字符串
可以是字符串
的实例,因为字符串
类是最终的),等于
返回false。
问题内容: 输出是 只是对.equals有一个简单的问题。 不管对象内容如何,仅当两个对象引用都指向同一对象时才返回true吗? 编辑 :现在我了解有关的部分,但是为什么2号线和3号线也不会返回? 编辑 :我相信看参考变量的地址,因此s1和s2不能相等。如果我的假设不正确,请纠正我 问题答案: 是,,这意味着两个对象引用不同,结果为false。 对于,您可以使用 为了进行编辑,您要在两个不同的St
问题内容: 我是第一次遇到,很惊讶,因为Java已经具有一个非常强大的类,可以追加。 为什么要上第二堂课? 在哪里可以了解更多信息? 问题答案: 不允许附加。你在上调用的每个方法都会创建一个新对象并返回它。这是因为String它是不可变的-无法更改其内部状态。 另一方面是可变的。调用时,它会更改内部char数组,而不是创建新的字符串对象。 因此,拥有: 而不是,这将创建500个新的字符串对象。 请
我不明白为什么system.out.println(names)在不受方法concat函数影响的情况下输出Sam,而system.out.println(names)却输出Sam4作为方法append方法的结果。为什么StringBuilder受到影响而不是String?通常情况下,对对象的引用调用方法会影响调用方,所以我不明白为什么字符串结果保持不变。提前致谢
主要内容:总结在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 Java 提供了两个可变字符串类 StringBuffer 和 StringBuilder,中文翻译为“字符串缓冲区”。 StringBuilder 类是 JDK 1.5 新增的类,
以下是输出 第1行返回,第3行返回false。 我不明白为什么编译器不认为“name1”和“sb”包含相同的值 类似地,编译器并不认为“s”和“sb”包含相同的字符串(都是非原语)。 有人能解释一下line1和line3的输出吗?
本文向大家介绍JDK源码分析之String、StringBuilder和StringBuffer,包括了JDK源码分析之String、StringBuilder和StringBuffer的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要介绍了关于JDK源码分析之String、StringBuilder和StringBuffer的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细