两个值相同的Integer对象的比较

package com.jj.test;

import java.util.Objects;

public class ObjectEqualsTest {
    public static final Integer COUNT_NONE = 0;
    public static void main(String[] args){
        Integer a=new Integer(0);
        boolean bool = Objects.equals(a,COUNT_NONE);
        a.equals(COUNT_NONE);
        System.out.println(a==COUNT_NONE);/*1*/
        System.out.println(bool);/*2*/
        System.out.println(a.equals(COUNT_NONE));/*3*/
    }
}

运行结果:

false
true
true

1.结果的第一行是false原因为:

两个integer引用的地址不同,==比较的是引用(内存地址),所以最终结果是false。

2.通过源码可以很清楚的看到后两个结果是true的原因:

Objects对象中equals方法的源码:

  public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

Integer对象中重写的Object.equals()方法:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
时间: 2024-10-31 07:05:07

两个值相同的Integer对象的比较的相关文章

C标签判断两个值是否相等

c标签判断两个值是否相等 Integer用:${user1.id eq user2.id}:int用:${user1.id == user2.id} 测试代码如下:<c:if test="${not empty listByParentId }">    <c:forEach items="${listByParentId }" var="listByParentId">       <c:if test="

定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式. 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Integer对象大小比较问题

一.问题 先来看一看例子 public class IntegerTest { public static void main(String[] args) throws Exception { Integer a1 = 127; Integer b1 = Integer.valueOf(127); System.out.println("1:"+(a1 == b1)); Integer a2 = 127; Integer b2 = 127; System.out.println(&q

C#4.0语法糖之第三篇: 参数默认值和命名参数 对象初始化器与集合初始化器

今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完善以及自我提高,给各位园友们带来更好,更高效的文章. 废话就说到这里,下面正式进入我们的今天的C#4.0语法糖,今天给大家分享一下参数默认值.命名参数.对象初始化器和集合初始化器. 参数默认值和命名参数:方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合

一个数组nums,其中任意两个值等于给定值target,返回这两个值在nums里的位置

1 package com.java.tencent; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 import java.util.HashMap; 6 import java.util.Map; 7 8 public class T_1_twoSum { 9 10 /*初级解法*/ 11 public int[] twoSum(int[] nums, int target) { 12 int[] resul

为什么HashMap初始大小为16,为什么加载因子大小为0.75,这两个值的选取有什么特点?

内容转自:https://blog.csdn.net/Dazhu233/article/details/79596584 先看HashMap的定义: public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap是AbstractMap的子类,实现了Map接口. HashMap() Constructs an empty Hash

==运算符是判断栈中两个值是否相等

默认情况下(也即类型没有重载==运算符的情况下),==运算符是判断栈中两个值是否相等.为了验证这个结论,来看下面的程序: namespace JudgeEquals{    class Program    {        static void Main(string[] args)        {            int a = 10;            int b = 10;            Console.WriteLine(a==b); string s1 = "a

java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作

在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 //在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 List<String> addlist = new ArrayList<String>(); addlist.add("hi"); addlist.add(0,"hello"); addlist.add("world"); Object obj[] = addli