2.==和equals的区别,了解一下?

从选卡到验证:CST仿真GPU加速全流程实战指南 本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。 阅读详情

对于==的解读

在对于基本类型和引用类型,==的作用效果是不同的:

  • 基本类型:比较的是值是否相同。
  • 引用类型:比较的是引用是否相同。 

代码示例:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

 代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

equals 解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下: 

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

public boolean equals(Object obj) {
		return (this == obj);
}

原来 equals 本质上就是 ==。

那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

同样的,当我们进入 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[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

ParaView :在paraview创建渲染视图 阅读详情

相关推荐

adb 通信协议分析以及实现 (三) (Adb 网络通信部分解析)

这篇文章说下adb 和adb 服务进程之间通信的socket 协议。  adb 服务进程启动之后,会监视本地的5037 端口,使用的是TCP 协议,所以adb 发送的命令其实就是往本地的5037 端口发送数据,做过网络编程的都知道,本机可以用127.0.0.1 ip地址。 有了ip 地址和端口号socket 通信就没问题 1)  命令发送方式      

inforecovvery的博客 2870

JavaScript中一个等号、二个等号、 三个等号 的区别

一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。=== 判断规则如果类型不同,就[不相等] 如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 如果两个值都是true,或...

qq_42247917的博客 3751

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

java equals 区别_java中equals和==的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为t...

weixin_39828457的博客 299

Infiniband互连网络概述

一、Infiniband是什么? InfiniBand(简称IB)是一种工业标准规范,它定义了一种输入/输出架构,用于计算节点、通信基础设施设备、存储和嵌入式系统的互连。操作系统可以是Linux、Windows或ESXI。 IB网络一共是五层,从第一天起,IB就被设计为提供一个端到端的解决方案,改善和加速从物理层到上层的所有协议层。 IB协议于2000年由IBTA(InfiniBand Trade Association)提出,其规定了一...

weixin_41687819的博客 5229

DSP28335学习笔记——McBSP配置为SPI

由于28335硬件外设上只有一个SPI接口,所以当SPI接口不够用时,可以将McBSP配置为SPI接口。 参考28335的数据手册,当DSP为主机时,配置McBSP为SPI所用到的接线如下图所示。 另外总结一些调试过程中的经验。 1.传输数据位数的确定 由RCR1寄存器中的RWDLEN1和XCR1寄存器中的XWDLEN1决定。分别对应着接受和发送的位数,在配置成SPI模式的时候,这

捕虫少年 1万+

== 和 equals 的区别

== 和 equals 的区别是什么? 使用 == 比较 Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。 引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。 使用 equals 比较 equals方法是...

ConstXiong 6万+

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 427

Java 中 Equals和==的区别

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。 在JVM中 内存分为栈内存和堆内存。二者有什么区别呢? 当我们创建一个对象(new Object)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,还需注意的一点,基本数据类型是存储在栈内存中。有了一定的了解 我们来看E

tcytcy123的博客 4万+

【Clickhouse】Cannot allocate block number in Zookeeper write prefix view location

我有一个问题,我CK集群跑批的时候,replicated表变成只读的了下面是CK的报错和当时ZK的日志。下面是zk报错开始 我认为是写入的时候,压力太大,ZK扛不住了,就按照博客里的建议优化了ZK的参数,现在偶尔还会只读,zk报错都是图里的那种clickhouse的集群是5分片的集群,数据量比较大。每小时批量一次,每次2-10W条数据,字段的话,不到200个字段,使用的 jdbc sink写入。

九师兄 836

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

== 和 equals() 的区别

比较维度==equals()类型操作符方法基本类型比较值不可用引用类型默认比较内存地址比较内存地址(同==)引用类型重写后仍比较内存地址比较自定义内容String比较是否同一对象比较字符串内容包装类(缓存内)可能true(同一对象)比较值包装类(缓存外)false(不同对象)比较值null处理为true应返回false性能O(1)可能O(n)集合中使用不适合必须正确实现最佳实践基本类型、枚举比较引用类型内容比较黄金法则:基本类型→ 用==引用类型比较引用→ 用==引用类型比较内容。

2301_78125917的博客 1308

泛微表单添加自定义按钮

泛微表单添加自定义按钮

技术分享 2191

Java中 ==和equals的区别?

方法通常会根据对象的内容来判断两个对象是否相等,通常会检查对象的字段值是否相同。比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象引用的是同一个内存地址,方法,定义自定义的对象比较逻辑。每个类可以重写(Override)如果你有一个自定义的类(比如。如果这两个字段都相同,方法,以便按内容比较对象。如果它们是不同的对象,的值都为 10,使用。方法来比较对象的内容。对于基本数据类型(如。,因为它们的值相同。

此人很懒,什么都没有写~~ 1739

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

== 和 equals 的区别是什么?

当变量是引用类型时,当使用 == 的时候是比较两个变量的内存地址是否相等,而使用 equals 方法比较的是两个变量的值(内容)是否相等。 当变量时基本类型时,基本数据类型只能使用 == 来比较是否相等,因为基本数据类型是没有 equals 方法的,比较的是两个基本数据类型变量的值是否相等。

luluer2016的博客 964

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

==和equals()方法的区别

开发工具与关键技术:MyEclipse 10、Java jdk 作者: 撰写时间:2019年5月7日 在初学java的时候,我们很容易会把“和equals()”的意思很容易混淆。因为它们的意思都是比较是否相等。那么和equals()之间的区别在于哪里??如果我们不把这个弄清楚,那么就很容易出现一些低级的错误。那我今天带你了解了解==和equals()的区别在哪。 public class Fin...

weixin_43741599的博客 1896

==和equals()的区别

==和equals的区别(粗整合) 首先我们先来认识下==和equals的区别 ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较 简单的概括来说: ==比较的是地址,equals()比较的是值 我们来认识下==方法(认识下java的内存机制) java把内存划分成两种,一种叫栈内存,一种是堆内存 栈的存取速度比堆快,速度仅次于位于CPU中的寄存器。但是栈中数据大小和生

qq_49180959的博客 1948

equals和==的区别 ==:

==: == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。 1、比较的是操作符两端的操作数是否是同一个对象。 2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。 3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如: int a=10 与 long b=10L 与 d...

m0_38087224的博客 529

equals和==的区别

== 当比较对象的时候:比较的是栈内存中存放在堆内存中的地址,比较两个对象的地址是否相同(也就是比较两个变量是否指向 同一个对象。 当比较基本数据类型时候(byte,short,int,long,char,double,folat,boolean):则直接比较值。 举例:inti=1; int j=1; i==j结果为t...

来杯Java 1998

Java基础之——equals和==的区别和联系

本文介绍了Java中equals和==的区别与联系。作者星河以通俗易懂的语言解释了两者的使用场景:基本数据类型只能用==比较值,引用数据类型用==比较内存地址。而equals方法在Object类中默认比较地址,但在String等类中被重写为比较内容。文章强调,若不重写equals,其效果等同于==;重写后则可自定义比较规则。全文用大白话讲解技术概念,旨在帮助读者轻松理解这一Java基础知识。

曹举的个人博客 932

== 和 equals 有什么区别?

因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变 量,equals() 方法存在于Object类中,而Object类是所有类的直接或间接父类,因此。,只是引用类型变量存的值是对象的地址。

qq_20770569的博客 2088

equals和==判等的区别和使用

equals和==判等的区别和使用

m0_74240639的博客 1039

equals和==有什么区别

equals和==有什么区别? == == 是用来比较值是否相同的这个值可以是基本类型的值,或者是引用类型的地址 public class Main { public static void main(String[] args) { int n=3; int m=3; System.out.println(n==m); ...

qq_41174684的博客 459

==和equals的区别

==和equals的区别: 1.==,可用于比较基本类型和引用类型,是运算符 equals是类的方法,如果类为null可能会死掉,只能比较引用类型 2.对于引用类型比较,如果不重新equals,就相当于==,==比较的是地址是否一致,即是否为同一个对象 若重写了equals,比较的是对象内容是否一致。(String已经重写) eg: String s1,s2,s3 = "a

asd199205的博客 1670
上一篇: 1.JDK和JRE,了解一下?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值