String的equals

问题描述

public static void main(String[] args) {String a="d";char b='d';System.out.println(a.equals(b));}这个输出的结果是什么,求付上理由

解决方案

public boolean equals(Object anObject) {if (this == anObject) { return true;}if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) { if (v1[i++] != v2[j++])return false;}return true; }}return false; }看JDK的源码,b传进来,anObject应该是个Character对象。==肯定不符合,anObject也不是String类的实现,那只能返回false了。
解决方案二:
要想知道什么情况,断点调试一下就可以看得很清楚!
解决方案三:
equals(Object anObject) 该方法需要的是一个object,而测试程序中传的是一个char,char会被自动封装成对应的类,也就是上面的兄弟说的Character类,所以返回false。
解决方案四:
JDK的源码 java.lang.String中的 equals方法 : public static void main(String[] args) {String a="d";char b='d';System.out.println(a.equals(b));} // 执行过程分析public boolean equals(Object anObject) { // a 引用和b 引用,不是同一个应用地扯值,所以这里不会return true;if (this == anObject) { return true;} //b 不是string 的实例引用,所以进入不下此判断,return false了。if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) { if (v1[i++] != v2[j++])return false;}return true; }}return false; }

时间: 2024-10-28 06:47:00

String的equals的相关文章

string类equals方兴方法null和""的比较区别

string类equals方兴方法null和""的比较区别 '声明 Public Shared Function Equals ( _  a As String, _  b As String, _  comparisonType As StringComparison _ ) As Boolean 参数 a 类型:System.String 要比较的第一个字符串,或 Nothing. b 类型:System.String 要比较的第二个字符串,或 Nothing. compariso

Java String 的 equals() 方法可能的优化

优化 JDK1.4, 1.5 的 String Class 代码如下 以下内容为程序代码 public final class String     implements java.io.Serializable, Comparable<String>, CharSequence {     /** The value is used for character storage. */     private final char value[];           /** The offs

java String类常量池分析及&quot;equals&quot;和&quot;==”区别详细介绍_java

java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可

Java hashCode()和equals()的几个问题

本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equals() 之间有什么联系? 第1部分 equals() 的作用 equals() 的作用是 用来判断两个对象是否相等. equals() 定义在JDK的Object.java中.通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等.源码如下: public boolean equ

equals(Object) 与 == 的区别

在比较对象时候,常常用到"=="和"equals(Object)".它们常常让初学者感到疑惑.下面先看一个例子 public class Example1{ public static void main(String[] args) { String s1=new String("abc"); String s2=new String("abc"); // s1=s2; System.out.println("用

[Java] equals与==的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! == 是一个运算符.  equals则是string对象的方法. Java中 值类型 是存储在内存中的栈中.  而引用类型在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中.所以字符串的内容相同,引用地址不一定相同,有可能创建了多个对象. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals将此字符串与指定的对象比较.当且仅当该参数不为 null,并且是与此对象

从Java的堆栈到Equals和==的比较

认识Java中堆和栈 栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是

《Java特种兵》1.1 String的例子,见证下我们的功底

本文是<Java特种兵>的样章感谢博文视点和作者授权本站发布 1.1 String的例子见证下我们的功底 哇塞第1节就开始讲代码例子受不了啦胖哥你坏死了所有的书第1节都是写这个领域有什么东西的. 哈哈小胖哥天生就是个逆天之人哦希望你能先实践有了感性认识后再进行理论了解内在. 下面的代码改编于网络牛人的一段程序先看代码清单1-1. 代码清单1-1 一段String的比较程序 private static void test1() { String a = "a" + &quo

对于java equals方法的疑惑。

问题描述 对于java equals方法的疑惑. String s1 = new String("123"); String s2 = new String("123"); System.out.println(s1.equals(s2)); Test t1=new Test("123"); Test t2=new Test("123"); System.out.println(t1.equals(t2)); 为何上面输出的是