本文目录
- JAVA中的equal方法的格式和用法
- “==“和equals方法究竟有什么区别
- java中equals方法详解有哪些
- 深入java的equals方法,怎么比较两个对象的
- .net中有equals方法吗
- 5.简述“”和“ equals ()方法”的区别(20分)
- 个对象的比较 equals()方法和==号的区别
- java 中String的equals()方法是什么
- String类中Equals方法和Object类中的Equals方法有什么不同
JAVA中的equal方法的格式和用法
java中的是equals,没有equal,equals比较的是内容,只要值相同就是true。如:String str = new String("aaa");String str1 = new String("aaa");boolean bl = str.equals(str1);结果就是:true。备注:但是如果比较的是str==str1,这个结果就是false(地址引用不同)。
“==“和equals方法究竟有什么区别
“==“操作符专门用来比较两个变量的值是否相等,“equals“方法是用于比较两个独立对象的内容是否相同。
概念介绍:
“==“:
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存,变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。
对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
“equals”:
方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。
例如,对于下面的代码:
String a=new String("foo"); String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
java中equals方法详解有哪些
因为你的Value类没有重写equals 方法,这个方法是在Object类中定义的,是可以自己按照需要进行重写的,如果没有重写,其默认的逻辑是比较两个相互equals 的对象的内存地址是不是同一个地址,第一个输出的时候v1,v2都是new出来的,所以v1和v2在堆中是不同的内存地址,所以equals结果为false\x0d\x0a第二个输出,其调用的是Integer类的equals,Integer类中有重写原有equals方法的逻辑,其逻辑是比较两个Integer对象中封装的数字的值,如果相同就返回true,因此第二个输出true\x0d\x0a第三个输出false原理同第一个,两个对象之间使用==比较的就是内存地址,因为都是new出来的,堆内存地址不同,所以输出false\x0d\x0a简单来讲,如果来自同一个类的两个对象,如果没有重写equals方法的逻辑,其==结果和equals结果是相同的,如果有重写equals方法,则==和equals结果可能会不同
深入java的equals方法,怎么比较两个对象的
当定义一个类时,首先这个类会继承Object类(所有类的父类)的equals方法,然后开发者可以根据具体业务场景去考虑要不要重写equals方法。
public boolean equals(Object obj) { return (this == obj);}
上面代码即是Object的equals方法的实现, == 判断,即两个对象的地址完全一样的时候才相等。
当开发者定义类时不重写equals方法,则实际调用中使用Object这个父类的equals方法实现。
下面看看String的equals方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1 = value; char v2 = anotherString.value; int i = 0; while (n-- != 0) { if (v1) return false; i++; } return true; } } return false;}
这就是String重写的equals方法,可以仔细看看,很有参考价值。
接下来写段类定义的代码:
public class Person { private String name; // 姓名 private int age; // 年龄 private String speciality; // 特长 @Override public boolean equals(Object obj) { // 两个对象是同一个时,直接return true if (this == obj) { return true; } if (obj instanceof Person) { // 比较对象也是Person对象时,判断name和age是否都相同 Person p = (Person) obj; return name.equals(p.name) && age == p.age; } return false; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSpeciality() { return speciality; } public void setSpeciality(String speciality) { this.speciality = speciality; }}
测试代码:
public class Test { public static void main(String args) throws IOException { Person p1 = new Person("张三", 20, "java"); Person p2 = new Person("张三", 20, "python"); System.out.println(p1.equals(p2)); }}
根据Person重写的equals方法可以知道,运行结果为 true
如果Person没有重写equals方法,那么会调用Object的equals方法,运行结果为 false
所以实际怎么比较两个对象这完全是看开发者也就是你自己的意思
.net中有equals方法吗
是的,.NET框架中有equals()方法,它是用于比较对象之间的值是否相等,例如字符串、数字、日期等类型。在.NET中,所有的类都继承了Object基类,因此所有的对象都可以使用equals()方法。equals()方法的定义如下:复制代码public virtual bool Equals(object obj);其中,obj参数是用于与当前对象进行比较的另一个对象。equals()方法会比较两个对象的类型和值,如果类型和值都相同,则返回true,否则返回false。需要注意的是,equals()方法默认比较的是对象的引用,即比较两个对象是否指向同一个内存地址。如果需要比较对象的值是否相等,需要在具体对象的类中重写equals()方法,并根据实际情况编写比较逻辑。此外,在.NET中还提供了一些类型特定的Equals()方法,如String.Equals()、Int32.Equals()等,用于比较特定类型的对象值是否相等。这些方法可以更快速、更精准地进行比较。
5.简述“”和“ equals ()方法”的区别(20分)
浅谈Java中的equals和==
在初学Java时,可能会经常碰到下面的代码:
1 String str1 = new String("hello");2 String str2 = new String("hello");3 4 System.out.println(str1==str2);5 System.out.println(str1.equals(str2));
为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就会导致自己在以后编写代码时出现一些低级的错误。今天就来一起了解一下==和equals方法的区别之处。
一.关系操作符“==”到底比较的是什么?
下面这个句话是摘自《Java编程思想》一书中的原话:
“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。
这句话看似简单,理解起来还是需要细细体会的。说的简单点,==就是用来比较值是否相等。下面先看几个例子:
public class Main { /*** @param args */public static void main(String args) { // TODO Auto-generated method stubint n=3; int m=3;System.out.println(n==m);String str = new String("hello");String str1 = new String("hello");String str2 = new String("hello");System.out.println(str1==str2);str1 = str;str2 = str;System.out.println(str1==str2);}}
输出结果为 true false true
n==m结果为true,这个很容易理解,变量n和变量m存储的值都为3,肯定是相等的。而为什么str1和str2两次比较的结果不同?要理解这个其实只需要理解基本数据类型变量和非基本数据类型变量的区别。
在Java中游8种基本数据类型:
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值"true"和"false")
对于这8种基本数据类型的变量,变量直接存储的是“值”,因此在用关系操作符==来进行比较时,比较的就是 “值” 本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的(char类型取值范围为0~2^16-1).
也就是说比如:
int n=3;
int m=3;
变量n和变量m都是直接存储的"3"这个数值,所以用==比较的时候结果是true。
而对于非基本数据类型的变量,在一些书籍中称作为 引用类型的变量。比如上面的str1就是引用类型的变量,引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址。比如下面这行代码:
String str1;
这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。
而 通过new String("hello")来产生一个对象(也称作为类String的一个实例),并将这个对象和str1进行绑定:
str1= new String("hello");
那么str1指向了一个对象(很多地方也把str1称作为对象的引用),此时变量str1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的字符串"hello"。这里面的引用和C/C++中的指针很类似。
因此在用==对str1和str2进行第一次比较时,得到的结果是false。因此它们分别指向的是不同的对象,也就是说它们实际存储的内存地址不同。
而在第二次比较时,都让str1和str2指向了str指向的对象,那么得到的结果毫无疑问是true。
二.equals比较的又是什么?
equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。为了更直观地理解equals方法的作用,直接看Object类中equals方法的实现。
该类的源码路径为:C:\Program Files\Java\jdk1.6.0_14的src.zip 的java.lang路径下的Object.java(视个人jdk安装路径而定)。
下面是Object类中equals方法的实现:
很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。
但是有些朋友又会有疑问了,为什么下面一段代码的输出结果是true?
public class Main { /*** @param args */public static void main(String args) { // TODO Auto-generated method stubString str1 = new String("hello");String str2 = new String("hello");System.out.println(str1.equals(str2));}}
要知道究竟,可以看一下String类的equals方法的具体实现,同样在该路径下,String.java为String类的实现。
下面是String类中equals方法的具体实现:
可以看出,String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。
总结来说:
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
个对象的比较 equals()方法和==号的区别
1. == 号和equals()方法都是比较是否相等的方法2. ==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10;int y = 10;String str1 = new String("abc");String str2 = new String("abc");System.out.println(x == y); // 输出trueSystem.out.println(str1 == str2); // 输出false3. equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值
java 中String的equals()方法是什么
java.lang.String.equals() 方法比较字符串与指定的对象。其结果是true当且仅当参数不为null,并且是一个String对象,这个对象表示相同的字符序列
声明
以下是声明java.lang.String.equals()方法
public boolean equals(Object anObject)
参数
anObject -- 这是这个String对比较的对象
返回值
此方法返回true如果给定对象代表一个字符串,这个字符串,否则返回false
异常
NA
实例
下面的例子显示使用的java.lang.String.equals()方法
package com.pieryon;
import java.lang.*;
public class StringDemo {
public static void main(String args) {
String str1 = "sachin tendulkar";
String str2 = "amrood admin";
String str3 = "amrood admin";
// checking for equality
boolean retval1 = str2.equals(str1);
boolean retval2 = str2.equals(str3);
// prints the return value
System.out.println("str2 is equal to str1 = " + retval1);
System.out.println("str2 is equal to str3 = " + retval2);
}
}
编译和运行上面的程序,这将产生以下结果:
str2 is equal to str1 = false
str2 is equal to str3 = true
String类中Equals方法和Object类中的Equals方法有什么不同
没什么不同。。。所有类都是object的子类。。。。String的equals是重写的父类的