equals()源代码及释义

源代码:

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;    }解释:
anObject instanceof String;首先上边的语句,先判断anObject是不是String类的一个实例,如果是运行下边的语句String anotherString = (String)anObject;字符串是一个引用数据类型,本身是String个对象,在这里把传进来的anObject这个对象,赋给anotherString (需要类型转换)他当然可以调用String类里的成员,你说的count、value、offset都是String的成员 int n = count;//这个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;//在遍历的过程中如果有不同的就返回false;}                 //你如果用过equals这个方法应该知道它返回的是boolean值return true;    }}return false;    }
时间: 2024-10-18 09:11:41

equals()源代码及释义的相关文章

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

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

【解惑】让人头疼的"相等"关系

Java中判断相等关系一般有两种手段:(1) “==”关系操作符  (2) equals()方法. 显然,基本数据类型变量之间只能用"==".而对象之间两种手段都是合法的.但是有很多初学者会在“判断Java的相等关系”上面犯错误,这里我们在JVM运行层面上彻底剖析其中的奥秘.如果你对JVM规范不太了解的话,在看本文前请先了解一下JVM运行程序时,在内存中管理的五个运行时数据区,特别是堆和Java栈方面的知识(参见<Java 虚拟机体系结构 >) . ★ “==”运算符的比较

Java API学习笔记(一)

1. 不要重复初始化变量 默认情况下,调用类的构造函数时,java会把变量初始化成确定的值,所有的对象被设置成null,整数变量设置成0,float和double变量设置成0.0,逻辑值设置成false.当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键字创建一个对象时,构造函数链中的所有构造函数都会被自动调用.这里有个注意,给成员变量设置初始值但需要调用其他方法的时候,最好放在一个方法比如initXXX()中,因为直接调用某方法赋值可能会因为类尚未初始化而抛空指针异常,如:publ

Java源代码学习 -- java.lang.String

java.lang.String是使用频率非常高的类.要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的.由java.lang.String,自然联想到java.lang.StringBuffer和java.lang.StringBuilder,下篇文章再来研究java.lang.StringBuffer和java.lang.StringBuilder. 重要属性 java.lang.String对象中字符串主要是以字符数组的形式存储.当调用对象方法获取字符串长度时

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

Java提高篇——通过分析 JDK 源代码研究 Hash 存储机制

阅读目录 通过 HashMap.HashSet 的源代码分析其 Hash 存储机制HashMap 的存储实现Hash 算法的性能选项HashMap 的读取实现HashSet 的实现 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类.虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 H

HashMap源代码解析

HashMap原理剖析 之前有看过别人的HashMap源代码的分析,今天尝试自己来分析一波,纯属个人愚见.听一些老的程序员说过,当别人跟你说用某样技术到项目中去,而你按照别人的想法实现了的时候,你只能是一个码农,当你自己会想到用一样东西到你的实际开发中的时候,你是一个普通的程序员,当你不仅能想到用某样技术到项目中去,而且深深的熟悉这项技术的底层实现,那就是一个有内功的程序员了. HashMap,哈希表,基于哈希算法实现的一个java集合.起初使用这个哈希表的时候,感觉非常的不习惯,主要是容易和其

android样式布局---&amp;gt;ListView(附上源代码)

在android应用开发过程中,Listview 是经常使用的数据展现控件,往往用于显示列表形式的数据. 假设只显示数据往往会显得非常单调.非常多时候依据须要定义不同的item 背景选项.比如定义数据的标题.表头或者间隔显示Listview item背景内容. 如图的所看到的的背景内容,如今以一个WeatherDemo为模型分析Listview的相关用法. 实现思路:定义Listview不同的背景,首先要定义好标题与表格内容的两个不同的xml布局文件(city_item.xml,content_

HashMap、HashSet源代码分析其 Hash 存储机制

集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量. 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存.取集合元素:对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可