Java中关于和equal的区别以及equals()方法重写

Java中关于和equal的区别以及equals()方法重写
Java中关于和equal的区别以及equals()方法重写

Java中关于==和equal的区别以及equals()方法重写

例子i:

string1="aaa";

string2="aaa";

String string3=new String("aaa");

String string4=new String("aaa");

string1==string2 // true; .

string1.equals(string2);//true;

string3==string4;//false 因为用new创建了2个对象,所以是两个不同的内存地址

string3.equals(string4);//true 而String类的是不可改变的,所以会指向同一个内存地址,所以返回为true

equals()是object的方法,所以只是适合对象,不适合于基本类型,equals()默认是用"=="比较两个对象的内存地址,如果想要比较两个对象的内容,要重写equals()方法才可...而==可以比较两个基本类型,也可以是对象...

String的equals()方法重写:

public boolean equals(Object object){

if( this==anObject)

{return true;}

if(anObject instancdOf 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;

}

总而言之:在类对象中equals()方法比较的是对象的值,==比较的是对象.即为对象的引用(即为内存地址)一些特殊情况下equals()是重写了方法咯..

equal:是用来比较两个对象内部的内容是否相等的,由于所有的类都是继承自https://www.360docs.net/doc/938278112.html,ng.Object

类的,所以如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的e qual方法返回的却是== 的判断,因此,如果在没有进行该方法的覆盖后,调用该方法是没有

任何意义的。==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

1、声明格式

public boolean equals(Object obj)

其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.

比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;

而animal1和animal3变量引用同一个DOg对象,因此用= =或者equals()方法比较的结果为true.

Animal animal1=new Dog();

Animal animal2=new Cat();

Animal animal3=animal1;

则animal1==animal2 (FALSE)

animal1.equals(animal2) (false)

animal1==animal3 (true)

animal1.equals(animal3) (true)

而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:

java.io.file,java.util.Date,https://www.360docs.net/doc/938278112.html,ng.string,包装类(Integer,Double等)

比如

Integer int1=new Integer(1);

Integer int2=new Integer(1);

String str1=new String("hello");

String str2=new String("hello");

int1==int2 输出:false,因为不同对象

int1.equals(int2) 输出:TRUE

str1==str2 (false)

str1.equals(str2) (true)

当然,可以自定义覆盖object类的equals()方法,重新定义比较规则。比如,下面Person类的equals ()比较规则为:只要两个对象都是Person类,并且他们的属性name都相同,则比较结果为true,否则返回false

public class Person{

private String name;

public Person(String name)

{

https://www.360docs.net/doc/938278112.html,=name;

}

public boolean equals(Object o)

{

if (this==0) return true;

if (!o instanceof Person) return false;

final Person other=(Person)o;

if (https://www.360docs.net/doc/938278112.html,().equals(https://www.360docs.net/doc/938278112.html,()))

return true;

else

return false;

}

}

注意,在重写equals方法时,要注意满足离散数学上的特性

1、自反性:对任意引用值X,x.equals(x)的返回值一定为true.

2 对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为tr ue;

3 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true

4 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变

5 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false

java中equals方法的用法以及

java中equals方法的用法以及==的用法(转) equals 方法是https://www.360docs.net/doc/938278112.html,ng.Object 类的方法。 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"); s2 = new String("abc"); 那么: s1==s2 是false //两个变量的内存地址不一样,也就是说它们指向的对象不一样,故不相等。 s1.equals(s2) 是true //两个变量的所包含的内容是abc,故相等。 注意(1): 如果:StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a"); 结果:s1.equals(s2) //是false 解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false. 注意(2): 对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符 串常量所生成的变量,其中所存放的内存地址是相等的, 所以s3==s4是true(即使没有s3=s4这样一个赋值语句) (2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其 对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。 比如: class A { A obj1 = new A(); A obj2 = new A(); } 那么:obj1==obj2是false obj1.equals(obj2)是false

hashCode与equals的区别与联系(经典)

hashCode与equals的区别与联系(经典) 一、equals方法的作用1、默认情况(没有覆盖equals 方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。没有覆盖equals方法代码如下:[java] view plaincopy//学生类public class Student { private int age; private String name; public Student() { } public Student(int age, String name) { super(); this.age = age; https://www.360docs.net/doc/938278112.html, = name; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { https://www.360docs.net/doc/938278112.html, = name; } } 测试代码如下:[java] view plaincopyimport java.util.HashSet; import java.util.LinkedList; import java.util.Set; public class EqualsTest { public static void main(String[]

Java中关于==和equal的区别+以及equals()方法重写

Java中关于==和equal的区别以及equals()方法重写 例子i: string1="aaa"; string2="aaa"; String string3=new String("aaa"); String string4=new String("aaa"); string1==string2 // true; . string1.equals(string2);//true; string3==string4;//false 因为用new创建了2个对象,所以是两个不同的内存地址 string3.equals(string4);//true 而String类的是不可改变的,所以会指向同一个内存地址,所以返回为true equals()是object的方法,所以只是适合对象,不适合于基本类型,equals()默认是用"=="比较两个对象的内存地址,如果想要比较两个对象的内容,要重写equals()方法才可...而==可以比较两个基本类型,也可以是对象... String的equals()方法重写: public boolean equals(Object object){ if( this==anObject) {return true;} if(anObject instancdOf 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;} }

equals方法

重写equals方法 1、equals方法和== ?对于基础类型而言,“==”比较的是基础类型的值。对于对象而言,“==”比较的是引用,即对象的内存地址。 ?equals()方法在Object基类中,其内部使用“==”实现的。在很多类中重写了equals方法,因此很多类中重写了该方法用于实现对象相等。比如:string 类等。 2、什么时候需要重写equals方法 第一种情况:如果类中提供的equals方法无法满足需求,则需要重写equals方法。 第二种情况:对于采用哈希算法的集合,集合中对象必须重写hashCode方法,同时也要重写equals方法。注意在重写equals方法的时候,函数的返回值、参数类型和参数个数必须相同,类的权限访问可以不同,但是子类重写父类的方法时,访问控制权限必须大于父类。 比如:public boolean equals(Object o)与public boolean equals(String o),构成不了重写,构成的只是重载。假如父类有方法private boolean equals(Object 0),子类这样重写public boolean equals(Object 0),可以构成重写。 3、对象相等的含义:对象的类型相同,对象的某个属性相同(如果重写该方法需要自己去决定哪个属性相同)。 对象相等的判断: ?equals(参数)函数中的参数不能为空,需要进行判断。 ?判断两个对象的类类型是否相同。两种方式:第一种判断对象的类字节码是否相同;第二种使用instanceof关键字,判断左边的对象是否为右边类的实例对象。 ?根据自己的需求决定哪个属性相同。 示例一:重写equals方法 private String username; private String password; private String gender; private int age; 方法 public User(String username,String password,String gender,int age) {} public void setUsername(String username) {} public void setPassword(String password) {} public void setGender(String gender) {} public void setAge(int age) {} public String getUsername() {} public String getPassword() {} public String getGender() {} public int getAge() {}

Java常用类和方法面试题+答案

2015年12月20日18:25:21 Java常用类和方法重点总结 作者:数据分析玩家 1、简述Java中内存分配的问题 1>凡是new()出来的东西,都是在堆中进行分配的 2>局部变量【数据类型+变量名】都是在栈中进行分配的 3>静态变量【static】和字符串常量【“String”】都是在数据区进行分配的 4>方法【代码】都是在代码区进行存放的 2、简述Java中Object类的地位 1>Java中所有的类【自己定义的类以及Sun公司提供的类】都默认自动继承了Object类 2>Java中所有的类都从Object类中继承了toString()方法、hashCode()方法和equals()等方法 3、简述Object类中toString()方法的注意事项 1>toString()方法的返回值是一个字符串 2>toString()方法返回的是类的名字和该对象的哈希码组 成的一个字符串,即toString()方法返回的是该对象的字符串表示形式 3>在Java中System.out.println(类对象名)实际输出的是该对象的toString()方法返回的字符串,即括号中的内容等价于类对象名.toString(),toString方法的好处是在碰到

println方法的时候会被自动调用,不用显示的写出来 4>建议所有的子类都重写从Object类中继承过来toString 方法,否则toString方法的返回值没有什么实际含义 4、简述Object类中equals()方法的注意事项 1>equals方法的返回值为true或false 2>Object类中equals方法只有在两个对象是同一块内存区域时,即不但内容相同、地址还必须相同时才返回true,否则即便内容相同、如果地址不同只会返回false 3>重写Object类中的equals方法目的在于:保证只要两个对象的内容相同,equals方法就返回true 5、简述Object类中hashCode()方法的注意事项 1>哈希码原本指的是内存空间地址的十六进制表示形式 2>hashCode()方法返回的是该对象的哈希码、即该对象的真实内存地址的十六进制表示形式,但是重写完hashCode()方法之后,返回的不再是该对象真实内存地址的十六进制表示形式 6、学习Java中toString方法、equals方法、hashCode方法共同的一个注意事项 在Java中,凡是动态分配的内存都是没有名字的,而是将其地址赋给一个指针变量【引用】,用指针变量去代表这个事物,所以引用和动态分配的内存有本质上的区别,但是在学习Java中的toString方法、equals方法和hashCode方

Java中判断对象是否相等的equals()方法使用教程资料

Java中判断对象是否相等的equals()方法使用教程 与==运算符响应,equals()方法也是Java中对对象进行比较的一大方式,要特别注意二者的不同点,这个我们在下文中即将讲到,接下来我们就来看一下Java中判断对象是否相等的equals()方法使用教程 Object类中的equals方法用于检测一个对象是否等于另一个对象。在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的。从这点上看,将其作为默认操作也是合乎情理的。然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的。所以一般在自定义类中都要重写equals比较。 下面给出编写一个完美equals()方法的建议: (1)显式参数命名为otherObject,稍后需要将转换成一个叫other的变量 这条语句只是一个优化。实际上,这是一种经常采用的形式。因为计算这个等式要比一个一个地比较类中的域所付出的代价小的多。 otherObject是否为null,如果为null,返回false。这项检测是很必要的。 (3)检测 如果equals的语义在每个子类中有所改变, 检测 比较基本类型域,使用equals比较对 == 如果在子类中重新定义equals,就要在其中包含调用super.equals(other)。如果检测失败,就不可能相等。如果超类中的域相等,就比较子类中的实例域。 对于数组类型的域,可以使用静态的Arrays.equals方法检测相应的元素是否相等。 来看几个字符串比较例子:

如果重写了对象的equals()方法,需要考虑什么

如果重写了对象的equals()方法,需要考 虑什么 1、用ibatis的原因 2、jdbc、hibernate、ibatis的区别 3、ibatis 的核心配置文件 4、ibatis的核心类 1、在myeclipse加入hibernate环境的全过程是什么? 2、hibernate的核心配置文件是什么及其作用? 3、hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么? 4、关联: 5、hibernate中的one-to-many或many-to-one中常用的方式是什么? 6、Criteria 的 1、JDBC如何做事务处理? 2、写出几个在Jdbc中常用的接口 3、简述你对Statement,PreparedStatement,CallableStatement 的理解 4、Java中访问数据库的步骤? 5、JDBC中的核心类及其作用是什么? 6、执行存储过程用那一个类,如何操作输出参数?(操作) 8、可能会让 1.列举出10个JAVA语言的优势 2.列举出JAVA中10个面向对象编程的术语 3.列举出JAVA中6个比较常用的包 4.JAVA中的标识符有什么作用和特点 5.JAVA中的关键字有什么特点,列举出至少20个关键字 6.JAVA中数据类型如何分类? 7.JAVA中运算符的分类及举例 8.super,th 1、java中有几种类型的流?JDK为每种类型的流提供了一些抽

象类以供继承,请说出他们分别是哪些类?2、启动一个线程是用run()还是start()? 3、线程的基本概念、线程的基本状态以及状态之间的关系4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什 1. super()与this()的区别? 2. 作用域public,protected,private,以及不写时的区别? 3. 编程输出如下图形。 4. JAVA的事件委托机制和垃圾回收机制 5. 在JAVA中,如何跳出当前的多重嵌套循环? 6. 什么是java序列化,如何实现java 序列化?(写一个实例) 7. 一

JavaSE知识点总结(个人整理)

2. 面向对象的理解 面向对象是Java的基本特征,是软件开发过程使用的基于面向过程一种思维方式,将功能封装进对象,强调具备功能的对象和调用结果,不关注具体实现这个功能的过 程。 面向对象特点:是一种更符合人们思考习惯的思想,可以将复杂的事情简单化,将程 序由执行者转换成为指挥者。 面向对象特性:封装,继承,多态 封装:封装是把数据和方法包装进类中,隐藏其具体实现细节,对外提供公共访问方法。封装的结果是一个同时带有特征和行为的数据类型。(安全性,复用性) 继承:当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以 定义为现有类的子类。或者,当多个类具有相同的属性和行为,我们可以抽取出共性 的内容定义父类,再创建相似的”兄弟”类时只要继承父类即可。当子类继承父类后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的方法不够强大,子类 可以按照子类自身的逻辑重写继承过来的父类方法。(复用性,可维护性,多态前 提) 多态:继承是多态的前提,多态是指一种事物具有多种形态,比如猫具有猫类的形 态,也具有动物的形态,多态的具体表现是父类引用指向子类对象,父类的引用也可 以接收自己子类的对象。(可维护性,扩展性) 面试:跟我谈谈什么是面向对象 1 面向对象是基于面向过程的 2 什么是面向过程什么是面向对象 3 面向对象的特点 3. 面向对象和面向过程的区别 面向过程强调的是功能行为,分析解决问题所需的步骤,以函数为基础,完成各种步 骤的操作和实现。 面向对象是基于面向过程的,将功能封装成对象,强调的是具备了这些功能的对象, 让对象去调用方法来解决问题。 面向对象举例

常用java技巧总结

面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 面向对象: 我们怎么才能更符合面向对象思想呢? A:有哪些类呢? B:每个类有哪些东西呢? C:类与类直接的关系是什么呢? 开发,设计,特征 面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情。 面向对象设计 其实就是在管理和维护对象之间的关系。 面向对象特征 封装(encapsulation) 继承(inheritance) 多态(polymorphism) 继承:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。 继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提 继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性 Java中继承的特点 A:Java中类只支持单继承 B:Java中可以多层(重)继承(继承体系) 继承的注意事项: A:子类不能继承父类的私有成员 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承

多态:同一个对象在不同时刻体现出来的不同状态。 多态前提: A:有继承或者实现关系。 B:有方法重写。 C:有父类或者父接口引用指向子类对象。 多态中的成员访问特点 A:成员变量 编译看左边,运行看左边 B:构造方法 子类的构造都会默认访问父类构造 C:成员方法 编译看左边,运行看右边 D:静态方法 编译看左边,运行看左边 多态的好处 提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证) 多态的弊端 不能访问子类特有功能 静态的特点: A:随着类的加载而加载 B:优先与对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据。 D:可以通过类名调用 静态变量和成员变量的区别 A:所属不同 静态变量:属于类,类变量 成员变量:属于对象,对象变量,实例变量 B:内存位置不同 静态变量:方法区的静态区 成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用

Java期末知识点整理总结

Java期末知识点整理总结 计科2班苏锐师编号47 学号201330551464 第一章 Java语言概述 1. Java语言发展历史和现状及前景 2. Java语言的特点: 简单、面向对象、分布式、健壮性、结构中立、 安全性、可移植、解释的、高性能、多线程、多态性 3. Java虚拟机概念(JVM),Java程序的执行过程 4. Java应用程序分类:Application和Applet 5. Java程序的开发环境:JDK,IDE 第二章 Java数据类型及其运算 1. 标识符与保留字 1.2 标识符命名语法规则与Java推荐的标识符命名规则 1.3 Java中的关键字 2. 数据类型byte, short, int long, char, float, double, boolean 注意点:Java中所有数据类型是确定的,与平台无关,没有sizeof操作,其中特别注意char 类型是2字节Unicode编码,与C++ 不同;知道基本类型都有对应的默认值。 整型数的十进制、八进制、十六进制值的表示。 实型数的十进制、十六进制与科学计数法表示,注意实型常量默认类型为double型。 3. 运算符与表达式算术运算符: + - * / % ++ -- 关系运算符:> >= < <= == != 逻辑运算符:&& || !& | 注意短路计算与非短路计算的差别 位运算符: >> << >>> & | ^ ~ 要认识异或(^)与按位取反(~)运算符 赋值运算符: += -= *= /= %= &= |= ^= <<= >>= >>>= 要注意赋值运算符中包含了强制转换: 若: int k = 1; k += 44.232D; 则相当于: k = (int) ( k + 44.232D); 条件运算符:exp ?stat1 :stat2 要注意stat1与stat2要求类型相兼容且不能为void类型。运算符的优先级:算术运算 > 关系运算> 逻辑运算

实现Java中对象比较的两个方法

实现Java中对象比较的两个方法 2009-06-30 09:37 网络 IT专家网字号:T| T 本文就给大家介绍Java中对象比较的两个方法,在IF等结构语句中,往往需要根据对象比较所得出的值来进行相关的处理。不过Java对象毕竟跟普通的变量不同。要比较两个对象是否相同,跟比较两个变量的值是否相同,有很大的不同。 AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 一.跟对象比较的几个相关的概念。 为了更加审核的理解对象比较的含义以及多个比较方法之间的差异,笔者认为读者首先需要了解几个相关的概念,或者说几对关系。 1.是类与对象的关系。类是具体的抽象,而对象是类的具体实现。这可能听起来还是有点模糊。做一个形象的比喻,类就好像是用来制作塑料盒子的模具,只要将PVC料注入到这个模具中就可以生产对应形状的盒子。而对象就好像是生产出来的盒子。虽然模具同一个,但是生产出来的盒子彼此之间仍然是不同的。一方面先天性就是不同的。因为根据相对论可以说明世界上没有两个相同的东西。其次后天性的影响,也会导致其不同。如生产出来后,在两个盒子上分别贴上不同的条码,他们两个就代表不同的盒子了。了解这个类与对象之间的关系,对于了解对象之间进行比较,会有很大的帮助。 2.是需要知道类与对象在内存中的实际存储情况。当程序员定义一个类时(不含有静态成员或者变量),一般不会在内存中给其分配一个存储结构。而只有定义对象时,才会在内存中分配存储结构。当利用同一个类定义不同的对象时,系统会在内存中为不同的对象创建不同的存储结构。也就是说,会对应不同的内存地址。虽然同一个类中定义出来的对象,其内容可能相同(成员变量、成员方法等等都相同),但是其内存中的地址仍然是不同的。 3.是需要注意对象的复制问题。如果要创建几个内容相同的对象,即复制相同内容的对象,现在主要有两种方法。一是通过成员变量赋值来完成。如在根据同一个类创建对象时,分别给与他们相同的初始化值。那么这两个对象的内容就是相同的。二是通过地址赋值来完成。即将第一个对象在内存中的地址赋值给第二个对象。此时两个对象名字虽然不同,但是他们却指向内存中的同一块区域。此时就好像一个人有两个名字,其实是同一个人。所以这两个对象内容也就相同了。

java中一些用法总结

java中一些用法总结 java中hashCode方法与equals方法的用法你懂吗?下面是为大家的关于java中hashCode方法与equals方法的相关文章,欢迎大家阅读! 篇一: 首先,想要明白hashCode的作用,必须要先知道Java中的集合。 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals 方法了。但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。 于是,Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。

这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 所以,Java对于eqauls方法和hashCode方法是这样规定的: 1、如果两个对象相同,那么它们的hashCode值一定要相同; 2、如果两个对象的hashCode相同,它们并不一定相同(上面说的对象相同指的是用eqauls方法比较。) 你当然可以不按要求去做了,但你会发现,相同的对象可以出现在Set集合中。同时,增加新元素的效率会大大下降。 hashcode这个方法是用来鉴定2个对象是否相等的。那你会说,不是还有equals这个方法吗?不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。 篇二:

java中equals方法和“==”的比较

java中equals方法和“==”的比较 equals 方法是https://www.360docs.net/doc/938278112.html,ng.Object 类的方法。 有两种用法说明: (1)对于字符串变量来说,使用“= =”和“equals()”方法比较字符串时,其比较方法不同。 “= =”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"); s2 = new String("abc"); 那么: s1= =s2 是false // 两个变量的内存地址不一样,也就是说它们指向的对象不一样,故不相等。 s1.equals(s2) 是true //两个变量的所包含的内容是abc,故相等。 注意(1): 如果:StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a"); 结果:s1.equals(s2) //是false 解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false.

注意(2): 对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符串常量所生成的变量,其中所存放的内存地址是相等的,所以s3= =s4是true(即使没有s3=s4这样一个赋值语句)(2)对于非字符串变量来说,"= ="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。 比如: class A { A obj1 = new A(); A obj2 = new A(); } 那么:obj1==obj2是false obj1.equals(obj2)是false 但是如加上这样一句:obj1=obj2; 那么obj1==obj2 是true obj1.equals(obj2) 是true 总之:equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。关于equals与==的区别从以下几个方面来说: (1)如果是基本类型比较,那么只能用==来比较,不能用equals 比如: public class TestEquals { public static void main(String[] args) { int a = 3; int b = 4; int c = 3; System.out.println(a == b);//结果是false System.out.println(a == c);//结果是true

JAVA程序设计同步章节模拟试卷带答案2

《Java程序设计》试卷二 一、选择题(2分*25=50分) 1、下面哪些是java语言中的关键字? A)sizeof B)abstract C)NULL D)Native 2、识别用线程创建apple的正确陈述。 A) 扩展JApplet 和Thread B) 扩展JApplet 和重设Thread 类的run()方法。 C) 扩展JApplet 和实现Runnable。 D) 扩展JApplet 和创建Thread 类的实例。 3、当试图访问超出数组下标的数组元素时会引发下列哪种异常: A)ArithmeticException B)NullPointerException C)ArrayIndexOutOfBoundsException D)NumberFormatException 4、JFrame默认的布局管理器是什么? A)BorderLayout B)FlowLayout C)CardLayout D)GridLayout 5、Java在调用Thread.sleep(100)方法的时候会抛出什么异常? A)InterruptedException B)IllegalAccessException C)SleepException D)RuntimeException 6、容器被重新设置后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变( ) A)CardLayout B)FlowLayout C)BorderLayout D)GridLayout 7、关于被私有保护访问控制符private protected修饰的成员变量,以下说法正确的是() A) 可以被三种类所引用:该类自身,与它在同一个包中的其他类,在其他包该类的子类 B) 可以被两种类访问和引用:该类本身,该类的所有子 C) 只能被该类自身所访问和修改 D) 只能被同一个包中的类访问 8、在服务器端,ServerSocket使用什么方法监听来自客户的通信? A)Get() B)Accept() C)GetClient() D)AcceptClient()

JAVA期末考试简答题---简答

JAVA期末考试简答题 1请举例说明string类与StringBuffer类的区别。 2请举例说明重载和重写(也称为覆盖)的区别。 3请举例简要说明JAVA语言的继承机制有何特点? 4请举例说明抽象类和接口的区别有哪些? 5请举例简要说明JAVA语言使用事件监听器进行事件处理的过程。 6静态函数能不能调用非静态函数或变量?举例说明。 7Java程序中允许多个static语句执行? 8布局管理器? 9关键字static,private,和protected,abstract,final 10异常处理的类层析结构和具体处理语句 11构造函数 12流处理方式,文件的读取和保存。 以下解答发现错误、或有补充、尽快发群里哦~~~~ 请举例说明string类与StringBuffer类的区别。 String中的方法都是返回一个新的字符串,而没有改变原来的字符串;String类重写了Object 的equals方法;String类能用“+”连接 StringBuffer中的方法都是能改变原字符串的值;StringBuffer类没有重写了Object的equals 方法;,StringBuffer类不能用“+”连接

请举例说明重载和重写(也称为覆盖)的区别。 重载:对于类中的方法(包括从父类继承的方法),两个方法的方法名相同,但参数签名不相同。 重写:在子类中定义了一个方法,它的方法名,返回类型和参数签名正好和父类中的某个方法的名,返回类型和参数签名相同,那么就说子类的方法覆盖了父类的方法。

请举例简要说明JAVA语言的继承机制有何特点? 子类可以使用父类中的成员变量和方法,然后也可以添加自己的属性和方法。如果子类没有构造方法,则编译器首先为子类添加一个无参的构造方法,然后调用父类的默认构造方法,如果子类有构造方法,则先调用父类的默认构造方法,再调用子类的构造方法;如果父类中没有默认构造方法,则出错。 请举例说明抽象类和接口的区别有哪些? 接口:使用interface关键字,一个类可以实现多个接口;一个类实现接口、必须实现接口里的所有方法;接口里必须是抽象方法。 抽象类:使用的是abstract 关键字、一个类只能继承一次。继承抽象类的话、是可以不全部实现他的所有方法的,抽象方法只需声明,无需实现。抽象类可含有非抽象方法。 5请举例简要说明JAVA语言使用事件监听器进行事件处理的过程。 首先事件监听器(包含真正处理事件的代码)向事件源(与事件关联的控件,如按钮、滚动条)注册,事件(敲击键盘,或点击鼠标)发生时,事件源向事件监听器发送一个事件对象(如果在该事件源上注册了多个事件监听器,则向所有的监听器发送) 6静态函数能不能调用非静态函数或变量?举例说明。 能。 7Java程序中允许多个static语句执行? 允许。 8布局管理器?

javaequals方法使用

javaequals方法使用 javaequals方法使用: 1)显示参数命名为otherObject,稍后需要将它转换成另一个叫做other的变量。 2)检测this与otherObject是否引用同一个对象: if(this==otherObject)returntrue; 这条语句只是一个优化。实际上这是一种经常使用的形式。 3)检测otherObject是否为null,如果为null,返回false。 这项检测很必要。 if(otherObejct==null)returnfalse; 比较this与otherObject是否为属于同一个类。如果equals的语义在每个子类中有所改变,就使用getClass检测: if(getClass()!=otherObject.getClass())returnfalse; 如果所有的子类都拥有统一的语义,就使用instanceof检测: if(!(otherObejctinstanceofClassName))returnfalse; 4)将otherObject转换为相应的类类型变量: ClassNameother=(ClassName)otherObject; 5)现在开始对所有需要比较的域进行比较了。使用==比较基本类型域,使用equals比较对象域。如果所有的域都匹配,就返回true,否则返回false。 returnfield==other.field&&field.equals(other.field)&&...; 如果在子类中重新定义equals,就要在其中包含调用 super.equals(other)。

参加Sun公司Java认证考试的方法和技巧

参加Sun公司Java认证考试的方法和技巧 Java以其平台无关性、面向对象、支持多线程等优点成为越来越多的程序开发人员的新宠,Java技术以其独特的优势在越来越多的领域得以使用和发展。作为程序开发人员,为了检验对Java掌握的程度,参加Sun公司的Java认证考试是比较好的一个方法。 想顺利通过考试,可以从以下几个方面着手: 1.参加培训或自学Java经典课程。如果有C语言和面向对象的基础,只需自学SL275课程以及JDK1.4 API,否则应该参加相应的培训班进行学习。 2.确定考试版本,明确考查的知识点及知识点的考查难度。其中选择题有两种形式:(1)给出一段代码让选择其运行结果;(2)给出关于某基本概念的一些描述语句让选择正确的答案。填空题一般是给出一段正确的代码,不提供选择项,

而让你填写上运行结果。 两个版本考查的知识点最大的差别在于310-025包含I/O、AWT,且对各个知识点的考查难度相对较容易,而310-035中去掉了I/O和AWT部分的内容,但增加了对Assertion的考查,同时对Wrapper classes、Collections、hashcode( )和equals( )考查的难度有所加大。所以要根据自己的情况选择合适的版本。我在复习时觉得I/O这一部分的内容较多且不好记忆,就选择了310-035,这个版本较难,也是对自己的一个挑战。 3.根据考查的知识点做练习题。由于认证考试是以试题的形式来考查对知识点的掌握情况,所以多做题是通过考试的最有效方法之一,通过对SL275课程系统的学习,掌握了有关知识点的基础知识以后,必须通过做题来测试自己对知识点的掌握情况,书中写的有关知识点的内容比较概括,有时自己觉得已经掌握了这部分内容,但做题时可能会出现各

hashcode()和equals()方法详解,避免重复

今天下午研究了半天hashcode()和equals()方法,终于有了一点点的明白,写下来与大家分享 1. 首先equals()和hashcode()这两个方法都是从object类中继承过来的。 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们必需清楚,当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。比如在String类中如下: 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; } 很明显,这是进行的内容比较,而已经不再是地址的比较。依次类推Double、Integer、Math。。。。等等这些类都是重写了equals()方法的,从而进行的是内容的比较。当然了基本类型是进行值的比较,这个没有什么好说的。 我们还应该注意,Java语言对equals()的要求如下,这些要求是必须遵循的: ? 对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。 ? 反射性:x.equals(x)必须返回是“true”。 ? 类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。 ? 还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。 ? 任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。 以上这五点是重写equals()方法时,必须遵守的准则,如果违反会出现意想不到的结果,请

Portal开发的一些常用方法和函数介绍

把基于jsr168的Portlet开发的一些小技巧和小知识记录下来,作为一种备忘和知识积累,便于以后察看。 1. javabean的写法 - java页面的代码: public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { request.setAttribute("username","liuzhaoy ##################"); } - jsp页面的写法 <%=username %> - 展示结果 2. 页面编码的写法 <%@ page import="javax.portlet.*, java.util.*" session="false"%> <%@ taglib uri="https://www.360docs.net/doc/938278112.html,/portlet" prefix="portletAPI" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 如果让其支持汉语,就改为:gb2312喽,呵呵。 3. 图片路径的写法
"> 其中renderResponse.encodeURL表示编码。目录结构截图: 4.状态的保存 怎么让一个textbox框保持其状态呢,就是输入框里的内容在点击提交按钮后信息不会丢失。

相关主题
相关文档
最新文档