首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比较Java中的Character,Integer和类似类型:使用equals还是==?

在Java中,Character、Integer和其他类似的类型是不可变的,这意味着它们的值是不可更改的。在比较这些类型时,我们应该使用equals方法而不是==操作符。

使用equals方法比较两个对象的值是否相等,而==操作符比较的是两个对象的引用是否指向同一个内存地址。因为Character和Integer是不可变的,它们的值是存储在对象中的,所以使用equals方法比较它们的值是更加安全和可靠的。

例如,以下代码将输出false,因为它比较的是两个不同的对象的引用:

代码语言:txt
复制
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b); // false

而以下代码将输出true,因为它比较的是两个对象的值是否相等:

代码语言:txt
复制
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a.equals(b)); // true

总之,在比较Java中的Character、Integer和类似类型时,应该使用equals方法而不是==操作符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java Integer(-128~127)值==equals比较产生思考

最近在项目中遇到一个问题,两个值相同Integer型值进行==比较时,发现Integer其中一些奥秘,顺便也复习一下==equals区别,先通过Damo代码解释如下: System.out.println...先总结如下: 1、以上代码第一段第二段旨在说明:在-128~127Integer值并且以Integer x = value;方式赋值Integer值在进行==equals比较时,都会返回true...,因为Java里面对处在在-128~127之间Integer值,用是原生数据类型int,会在内存里供重用,也就是说这之间Integer值进行==比较时只是进行int原生数据类型数值比较,而超出-...2、第三段旨在说明:==equals区别,==是进行地址及值比较,无法对==操作符进行重载,而对于equals方法,Integer里面的equals方法重写了Objectequals方法,查看Integer...这里代码不会有对象符合垃圾回收器条件,这儿i虽然被赋予null,但它之前指向是cacheInteger对象,而cache没有被赋null,所以Integer(100)这个对象还是存在。

77030
  • Java避坑记:比较数字是不同包装类型,千万注意使用equals方法导致问题

    ---- Java比较两个不同类型包装类型时候,即使数值相等,使用equals方法也会返回false ---- 示例: public static void main(String[] args...= null && a.equals(b)); } 其他数字类型源码暂不贴出。 从源码看出,包装数字类型使用equals方法前提必须是:类型一致。...如果原生类型存在自动类型转换,或原生类型与包装类型混用比较,很容易导致bug发生。 如何避免 ---- 除了类型转换成一致使用equals方法,数字类型比较使用compare方法。...(a, Math.toIntExact(b))); } 结果: 小结 ---- Java比较两个不同类型包装类型时候或原生类型包装类型混用,即使数值相等,使用equals方法也会返回false...封装数字类型使用equals方法前提必须是:类型一致,我们必须类型转换成同一类型。 数字类型比较最好使用compare方法。 ----

    40520

    11.1 Java 详解 Object 包装类

    小技巧:为了减轻书写重复 equals hashCode 代码复旦,可以借助一些公共类库进行辅助工作,例如使用 guava 来做生成这两个方法。...为此,Java 提供包装类(Wrapper Class)来将基本数据类型包装成类。 包装类也都很好记,除了 Integer Character 外,其他类名称与基本类型基本一样,只是首字母大写。...举例 Integer.toOctalString(15)输出结果为八进制 17。 那到底应该用静态 valueOf 方法,还是使用 new 创建包装类型呢?...实际上,从 Java 9 开始,这些构造方法已经被标记为过时了,因此更加推荐使用静态 valueOf 方法。 CharacterCharacter 类是 char 类型包装类。...类似 Java 5 还提供了相反功能,自动装箱( autoboxing ),装箱能够自动地将基本数据类型数值自动转换为包装类对象,而不需要使用构造方法。

    43710

    你不知道 equals ==

    没错,equals 方法是比较两个对象是否相同,确切是,我们想使用 equals 方法来判断两个对象值是否相等,学过 C++ 读者应该知道 C++ 可以重载运算符,但是你在 Java 见过重载运算符吗...在 Integer equals() 方法,首先判断要比较对象是不是 Integer类型,如果不是就直接返回 false,这里用到了 instanceof 关键字判断一个对象是不是某个类或者接口实例...== obj);}很简单,就是用等号比较了下两个对象引用地址是不是相等,子类要是想使用这个方法,就重载一下,不然直接直接使用 ==(双等号)比较没啥区别。...上面这道题只是简单数据类型,在 Java ,==(双等号)可以比较基本数据类型值是否相等,下面的代码结果为 false,true,现在大家应该都懂了。...对于基本数据类型来说,双等号是比较数值,而对于类类型,双等号比较是引用是否相同,这里需要注意 Java 缓存策略常量池。

    50420

    (26) 剖析包装类 (上) 计算机程序思维逻辑

    Java,基本类型对应包装类如下表所示: 基本类型 包装类 boolean Boolean byte Byte short Short int Integer long Long float Float...Java很多代码(比如后续文章介绍集合类)只能操作对象,为了能操作基本类型,需要使用其对应包装类,另外,包装类提供了很多有用方法,可以方便对数据操作。...装箱/拆箱写起来比较啰嗦,Java 1.5以后引入了自动装箱拆箱技术,可以直接将基本类型赋值给引用类型,反之亦可,如下代码所示: Integer a = 100; int b = a; 自动装箱/...还是使用new呢?...但IntegerLong中有一些关于位操作方法,我们还没有介绍,Character大部分方法我们也都没介绍,它们一些实现原理我们也没讨论,让我们在接下来两节中继续探索。

    555100

    SpringBoot 2.X@AsyncJava8completableFuture使用比较

    背景 看到項目中有使用到Async注解completetableFuturerunApply方法使用。兩者都是異步提交方法方式。那他两都分别在什么场景底下比较适用呢?...两个都是用默认性能产生默认线程数 @Async简介 为了使得异步可用,Spring提供了一个注解@EnableAsync如果Java配置文件标注他,那么Spring就会开启同步可用,这样就可以使用注解...如下面的测试情况,无限创建线程) 使用Java配置demo: package com springboot chapterl3.config /**** imports ******/ @Configuration...是的forkJoinPool默认核心线程数是根据CPU核数来穿建 使用Java8completableFuture使用demo /** * @author yuanxindong * @...总结 个人感觉Java 8completeTable比较好用一些,也支持自定义。 Spring也是OK,具体情景具体选择吧 @Async时候一定要设置线程数,以防万一OOM

    2.7K30

    equals == 到底有什么区别?

    Java equals == 对于不同数据类型有不同表现,话不多少,看演示。...因为在 Java 5 ,为 Integer 操作引入了一个新特性,用来节省内存提高性能。整型对象在内部实现通过使用相同对象引用实现了缓存重用。...除了 Integer 可以通过参数改变范围外,其它都不行。 对于基本数据类型包装类而言,不论是使用哪种方式创建,判断两者值是否相同,务必要使用 equals ,而不要使用 ==。...Person 我们没有写 equals 方法,根据 Java 继承特点,Person 类继承是 Object,所以使用是 Object equals 方法,那我们来看看 Object equals...结论 在引用类型,”==” 是比较两个引用是否指向堆内存里同一个地址(同一个对象),而 equals 是一个普通方法,该方法返回结果依赖于自身实现。

    68130

    Objects.equals很好,使用不当就会踩“坑”T_T

    需要节省时间粉丝继续: 使用可读性更好常量替代魔法数字 使用Objects.equals判断两个值相等 上面的招式都是CleanCode一书讲标准套路,可是,居然也出了bug!!!...= null 此处a是1,不为null step3: a.equals(b) 在本例,a是Integer类型,所以java.lang.Integer#equals public boolean...1L)).isFalse成立 除此之外,还有Long、Byte、Short、Double、Float、BooleanCharacter也有类似equals方法判断逻辑。...【碎碎念】 写业务代码时,常踩坑场景: Long类型Integer类型比较,比如:用户id场景。 Byte类型Integer类型比较,比如:状态判断场景。...Double类型Integer类型比较,比如:金额为0判断场景。

    20410

    Java八种包装类、常量池

    (4)包装类两个变量之间比较 推荐使用equals进行(比较是值而非地址)。对于Integer var = ?...,并不会复用已有对象,此时==比较是对象地址值、即对象是否相同,这是一个大坑,推荐使用equals方法进行判断Integerequals方法被重写过,比较是内部value值,源码如下public...Byte,Short,Integer,Long,Character,Boolean这 6 种包装类都实现了缓存池技术,原理及使用与上面介绍Integer类似;两种浮点数类型包装类 Float、Double...Double没有实现常量池技术当使用new关键字创建包装类对象时,都会在堆创建新对象;只有使用字面量赋值、且在缓冲池范围内 才可使用对象池,否则还是会在堆创建对象。...包装类两个变量之间比较 推荐使用equals进行(比较是值而非地址)Integer i2=5,自动装箱,底层调用Integer i2=Integer.valueOf(5) 方法。

    17810

    JAVA自动拆装箱、equals与==比较

    java中有8基本数据类型,这八种基本数据类型都有对应封装类型,下面是对应关系: int——Integer float——Float double——Double byte——Byte...long——Long char——Character boolean——Boolean short——Short 1.引入原因 举个例子:主要是用于java集合,List list...关于java自动拆装箱若干细节问题:https://www.cnblogs.com/qcblog/p/7670159.html 二、equals==比较 == 基本数据类型比较是值,复合数据类型比较对象地址...Object类equals方法“==”是一样,没有区别,而String,Double,Integer,Date,Point类等等一些类,是重写了equals方法,比较是两个对象内容是否相等...声明赋值语句是java唯一不需要new 就可以产生对象途径,即当声明一个变量后,JVM会在常量池中先查找有有没有一个值相同对象,如果有,就会把它赋给当前引用.即原来那个引用现在这个引用指点向了同一对象

    38410

    Java 为什么设计了包装类

    为什么需要包装类 在 Java ,万物皆对象,所有的操作都要求用对象形式进行描述。但是 Java 除了对象(引用类型)还有八大基本类型,它们不是对象。...对应包装类(位于 java.lang 包) byte Byte short Short int Integer long Long float Float double Double char Character...而在创建 a2 时候,由于其值 a1 相等,所以直接从缓存取出值为 127 Integer 对象给 a2 使用,也就是说,a1 a2 这两个 Integer 对象引用都指向同一个地址。...很显然,由于 InterCache 缓存机制存在,可能会让我们在编程时候出现困惑,因此最好使用 .equals 方法来比较 Integer 值是否相等。...因此,得出结论,「使用 equals 方法来比较两个包装类对象值」。 4.

    1.3K10

    一篇文章讲清楚Java基本数据类型,常量池,以及自动拆装箱秘密

    true false 引用类型Java,引用类型变量非常类似于C/C++指针。引用类型指向一个对象,指向对象变量是引用变量。...在 Java使用 final 关键字来修饰常量,声明方式变量类似: final double PI = 3.1415927; 虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。...在Java 5之前,如果要将一个int型值转换成对应包装器类型Integer,必须显式使用new创建一个新Integer对象,或者调用静态方法Integer.valueOf()。...自动装箱自动拆箱其实是Java编译器提供一颗语法糖(语法糖是指在计算机语言中添加某种语法,这种语法对语言功能并没有影响,但是更方便程序员使用。...intInteger为例,说明Java自动装箱与自动拆箱实现机制。

    6.3K20

    java基础面试题

    : // 创建不同类型数组: Integer, Double Character Integer[] intArray = { 1, 2, 3 }; String[] stringArray = {...(基本数据类型==比较是值,引用数据类型==比较是内存地址) equals() : 它作用也是判断两个对象是否相等,它不能用于比较基本数据类型变量。...则通过equals()比较该类两个对象时,等价于通过“==”比较这两个对象。使用默认是 Object类equals()方法。 情况 2:类覆盖了 equals()方法。...更多关于 hashcode() equals() 内容可以查看:Java hashCode() equals()若干问题解答 13.Java 几种基本数据类型是什么?...Java 基本类型包装类大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 相应类型缓存数据

    42610

    Java开发知识之Java包装类

    Java开发知识之Java包装类 一丶什么是包装类     包装类意思就是对基本数据类型封装成一个类.这些类都是Number子类.区别就是封装数据类型不同.包含方法基本相同...Number.compareTo(StrNumber); nRetValue == 0; 如果Number值为10 在进行比较.那么返回值就是< 0   2.3对象跟对象之间比较 对象跟对象之间比较还是使用...equals比较....如果Number不为4而是123.那么结果返回为True;   2.4 数值转为字符串 我门Integer值.是int类型.那么我们可以使用字符串接受....以前缀为类型接受. 如byteValue 返回byte数值.所以使用byte类型接受   compareTo(Integer); 传入一个Integer类.进行比较.

    48340

    JavaSE(六)包装类、基本类型字符串之间转换、==equals区别

    一、包装类 Java语言是一个面向对象语言,但是Java基本数据类型却是不面向对象,这在实际使用时存在很多不便,为了解决这个不足, 在设计类时为每个基本数据类型设计了一个对应类进行代表,这样八个基本数据类型对应类统称为包装类...  注意:在这八个类名,除了IntegerCharacter类以后,其它六个类类名基本数据类型一致,只是类名第一个字母大写即可   1.2、包装类位置 包装类型都是java.lang下类...2)引用类型变量比较           引用类型变量指向是对象,所以既可以使用==进行比较,也可以使用equals进行比较          区别在于:               equals...是Object方法,每个对象都可以调用其他对象比较是否相等,默认比较是俩个引用所指向对象内存地址值(==号作用一样),但是也可以在类equals方法进行重写,按照自己逻辑来比较俩个对象...==是java基本操作符,是不能重写,俩个引用使用==进行比较,那么比较是引用所指向内存地址值是否相同。

    85770

    JAVAJava 一切皆对象,基本类型也没下,包装类自动拆装箱来相助

    ,那工作量就太大了; Java集合框架并不支持基本数据类型存储,只支持对象存储; 故此,针对Java基本数据类型封装了包装类,每一个基本类型都有一个对应包装类,以下是详情: 八大基本数据类型包装类都使用...int value = i.intValue(); 自动装箱(Autoboxing)自动拆箱(AutoUnboxing) 在Java 5之前版本,基本数据类型包装类之间转换是需要手动进行,...输出为false System.out.println(i5.equals(i6)); // 输出为true,建议:如果对象包装类对象值作比较, // 应选用包装类equals...} 我们再来看Integerequals方法实现源码: 可以发现,包装类在比较时会将包装类型拆箱为基本数据类型,并使用==做比较。...在集合框架,只能存储对象类型,不能存储基本数据类型值。 4. Integerint并不是相同数据类型,尽管值是相同Integer是一个类,可以实例化为对象,但int只是一个基本数据类型

    49510

    深入剖析Java装箱拆箱

    深入剖析Java装箱拆箱   自动装箱拆箱问题是Java中一个老生常谈问题了,今天我们就来一些看一下装箱拆箱若干问题。...在前面的文章中提到,Java为每种基本数据类型都提供了对应包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣朋友可以查阅相关资料。...其他类似,比如Double、Character,不相信朋友可以自己手动尝试一下。   ...注意,Integer、Short、Byte、Character、Long这几个类valueOf方法实现是类似的。      Double、FloatvalueOf方法实现是类似的。...4.谈谈Integer i = new Integer(xxx)Integer i =xxx;这两种方式区别。   当然,这个题目属于比较宽泛类型

    825140
    领券