equals 方法(JAVA中的equal方法的格式和用法)

2024-07-02 11:16:38 8

equals 方法(JAVA中的equal方法的格式和用法)

本文目录

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“方法是用于比较两个独立对象的内容是否相同。

概念介绍:

  1. “==“:

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

    如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存,变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。

    对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

  2. “equals”:

    方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

    例如,对于下面的代码: 

    String a=new String("foo"); String b=new String("foo"); 

    两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

String类中Equals方法和Object类中的Equals方法有什么不同

没什么不同。。。所有类都是object的子类。。。。String的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中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 中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

深入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()等,用于比较特定类型的对象值是否相等。这些方法可以更快速、更精准地进行比较。

equals 方法(JAVA中的equal方法的格式和用法)

本文编辑:admin

本文相关文章:


equals 方法(.net中有equals方法吗)

equals 方法(.net中有equals方法吗)

本文目录.net中有equals方法吗java中equals方法详解有哪些个对象的比较 equals()方法和==号的区别深入java的equals方法,怎么比较两个对象的String类中Equals方法和Object类中的Equals方法

2024年6月22日 06:23

更多文章:


html中type的属性值(HTML5中input元素新增加哪些type属性值它们有什么作用)

html中type的属性值(HTML5中input元素新增加哪些type属性值它们有什么作用)

本文目录HTML5中input元素新增加哪些type属性值它们有什么作用HTML的input中type属性的属性值包括哪些html中样式和标签的属性是同一概念吗Html5的新增type属性怎么用代码在下面,谢谢大神们type标签在HTML中

2024年7月3日 08:08

java实现简单点餐系统(Java新手问问题!请用for循环,while以及do while循环帮我写一个点餐系统,只需要写出消费多少元就行!)

java实现简单点餐系统(Java新手问问题!请用for循环,while以及do while循环帮我写一个点餐系统,只需要写出消费多少元就行!)

本文目录Java新手问问题!请用for循环,while以及do while循环帮我写一个点餐系统,只需要写出消费多少元就行!学校订餐系统的代码怎样写基于java的美食推荐系统和基于java的餐厅点餐系统哪个选初学者,我有一个简单的java项

2024年3月15日 04:30

0是整数吗还是负数?0是整数吗

0是整数吗还是负数?0是整数吗

本文目录0是整数吗还是负数0是整数吗0算整数吗零是整数吗0是整数吗 0是不是自然数0是整数吗是正整数吗零是不是属于整数呢0是整数吗为什么0是不是整数0是整数吗还是负数0不是正整数。正整数,为大于0的整数,也是正数与整数的交集。正整数又可分为

2024年7月19日 06:57

生日祝福代码html模板(父亲节微信祝福代码)

生日祝福代码html模板(父亲节微信祝福代码)

各位老铁们,大家好,今天由我来为大家分享生日祝福代码html模板,以及父亲节微信祝福代码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录父亲节微信祝

2024年7月22日 12:05

rather怎么读(rather怎么读)

rather怎么读(rather怎么读)

本文目录rather怎么读英语but rather怎么翻译rather怎么读/adv. ˈræðər, ˈrɑðər; interj. ˈræðˈɜr, ˈrɑˈðɜr/从上面音标可见 rather 有不同读法,其发音按地区和口音而异,我们

2024年6月25日 05:45

webserver接口(思科模拟器实验的Web Server接口怎麽打开)

webserver接口(思科模拟器实验的Web Server接口怎麽打开)

本文目录思科模拟器实验的Web Server接口怎麽打开请教个关于多线程调用webservice接口是否会相互影响的问题DELPHI怎样写Webserverice接口开发我写了一个返回数据库表信息的webserver接口,对方调用我的web

2024年6月24日 03:57

模块结构图是什么阶段的结果?模块结构图产生的基础或依据是什么

模块结构图是什么阶段的结果?模块结构图产生的基础或依据是什么

“模块结构图”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看模块结构图是什么阶段的结果?模块结构图产生的基础或依据是什么!本文目录模块结构图是什么阶段的结果模块结构图产生的基础或依据是什么软件工程:把下面的DFD图转换为初始

2024年7月24日 23:20

律师资格证考试考哪几门(律师证考几科可以考几年)

律师资格证考试考哪几门(律师证考几科可以考几年)

各位老铁们,大家好,今天由我来为大家分享律师资格证考试考哪几门,以及律师证考几科可以考几年的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录律师证考几

2024年9月9日 09:05

foregone(foregone wages什么意思)

foregone(foregone wages什么意思)

本文目录foregone wages什么意思foregone-alternative是什么意思foregone wages什么意思foregone wages已成定局词典结果:foregoneadj.先前的,过去的,预知的; v.(在位置时

2024年7月23日 21:56

prompt用法(英文,prompt的用法 )

prompt用法(英文,prompt的用法 )

本文目录英文,prompt的用法 alert,confirm与prompt的用法,各自属于什么客户端DOS中prompt用法prompt和promote的区别c语言prompt什么意思prompt和urge的用法区别是什么prompt中p为

2024年6月22日 19:33

struts2安装(struts2 下载出错!IE提示无法下载!)

struts2安装(struts2 下载出错!IE提示无法下载!)

本文目录struts2 下载出错!IE提示无法下载!如何在linux中安装strutsmyeclipse xml自动提示怎么配置struts2主要核心功能是由什么实现struts2好像不同版本需要的jar包都不一样,到时候我添加的时候我怎么

2024年4月22日 13:10

k int sqrt m 是什么意思(int m,i,k; scanf(“%d“,&m); k=(int)sqrt(m); for(i=2;i<=k;i++) i f(m%i==0)break; if(i>=k) printf(“%d)

k int sqrt m 是什么意思(int m,i,k; scanf(“%d“,&m); k=(int)sqrt(m); for(i=2;i<=k;i++) i f(m%i==0)break; if(i>=k) printf(“%d)

本文目录int m,i,k; scanf(“%d“,&m); k=(int)sqrt(m); for(i=2;i=k) printf(“%d急~~!!在线等(int)sqrt(m)在VC中怎么解释 有追加悬赏20帮我看看这个程序我知道错了但

2024年6月27日 18:26

老板问:企业培训最终为了什么,我答:解决问题,提高效益,老板摇头,你们认为是什么?企业培训公司是做什么的怎么发展呢

老板问:企业培训最终为了什么,我答:解决问题,提高效益,老板摇头,你们认为是什么?企业培训公司是做什么的怎么发展呢

本文目录老板问:企业培训最终为了什么,我答:解决问题,提高效益,老板摇头,你们认为是什么企业培训公司是做什么的怎么发展呢企业管理培训主要课程有哪些做企业培训的本质是什么中小企业该怎样进行企业培训老板问:企业培训最终为了什么,我答:解决问题,

2024年7月15日 10:04

spring的正确读音(spring 春天 是发b的音还是p的音)

spring的正确读音(spring 春天 是发b的音还是p的音)

大家好,关于spring的正确读音很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于spring 春天 是发b的音还是p的音的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位

2024年7月13日 22:54

sql2000收缩数据库日志(SqServer2000数据库日志满了怎么办)

sql2000收缩数据库日志(SqServer2000数据库日志满了怎么办)

这篇文章给大家聊聊关于sql2000收缩数据库日志,以及SqServer2000数据库日志满了怎么办对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录SqServer2000数据库日志满了怎么办SQL server数据库日志满了

2024年9月8日 21:50

xss在线利用平台(xss怎么办公软件)

xss在线利用平台(xss怎么办公软件)

各位老铁们好,相信很多人对xss在线利用平台都不是特别的了解,因此呢,今天就来为大家分享下关于xss在线利用平台以及xss怎么办公软件的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录xss怎么办公软件xss如何使

2024年8月20日 06:40

java反射机制的原理和用途(什么是反射机制,有什么作用)

java反射机制的原理和用途(什么是反射机制,有什么作用)

本文目录什么是反射机制,有什么作用Java中的反射机制到底是干什么的有什么用什么是反射机制,有什么作用1.反射机制定义反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改其本身状态或行为的一种能力。在Java环境

2024年7月2日 16:42

matrix键盘在哪买(沈阳哪有卖机械键盘的)

matrix键盘在哪买(沈阳哪有卖机械键盘的)

“matrix键盘在哪买”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看matrix键盘在哪买(沈阳哪有卖机械键盘的)!本文目录沈阳哪有卖机械键盘的matrix怎么买matrixme在哪买达芬奇键盘要去哪买matrix在哪买

2024年7月28日 09:41

return怎么读音(回的英文怎么读)

return怎么读音(回的英文怎么读)

本文目录回的英文怎么读return; shorts;shirt; join 这英语用谐音怎么读回的英文怎么读return 英 第三人称单数:returns 复数:returns 现在分词:returning 过去式:return

2024年7月18日 04:59

vs2010破解版下载(去哪下载VS2010和VC++ 10.0如题 谢谢了)

vs2010破解版下载(去哪下载VS2010和VC++ 10.0如题 谢谢了)

本文目录去哪下载VS2010和VC++ 10.0如题 谢谢了求vs2010中文破解版下载地址谁能给我一个vs2010下载地址,最好中文的visual studio 2010 中文专业版破解版去哪下载VS2010和VC++ 10.0如题 谢谢

2024年6月14日 06:35

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索