所有整数型包装类对象值的比较,使用equals方法进行比较
一、整数型包装类对象值的比较,使用equals方法进行比较
题眼:整型包装类、值的比较
注:== :对于基本类型,比较的是值;对于引用类型,比较的是地址值。
// 组一
Integer i1=new Integer(10);
Integer i2=10; // Integer.valueOf(10)
i1==i2;// false
//组二
Integer i3=127;
Integer i4=127;
i3==i4;// true
// 组三
Integer i5=128;
Integer i6=128;
i5==i6;// false
组一:
new,会在堆内存中生成一个对象并返回地址值,i2是自动封箱,也new了一个对象,故i1和i2是不同的对象。
组二与组三:
i 的范围为区间[-128,127]时,valueOf方法直接返回事先创建好的对象并返回(复用已有对象),否则根据参数 i在堆上 new一个新的Integer对象并返回。
所以当比较两对象值的话,在[-128,127]时可以直接使用==,当超过这个范围使用equals方法。
推荐全部使用equals方法判断两个对象值是否相等。
二、以此类推:
Short,Long,Integer也类似,但Byte的取值范围是[-128,127],所以直接使用==。
三、扩展:BigDecimal
1)BigDecimal的等值比较应该使用compareTo(),而不是equals()。
答:因为equals()会比较精度(1.0与1.00返回结果为false),而compareTo()则会忽略精度。
说明:在金融项目中,对于精度是非常敏感的,而float 还是double即使浮点数,但是计算机不能完全用二进制表示十进制时候(会出现没有相同的二进制数情况),浮点数会失去一定的精确度。而BigDecimal可以对超过16位有效位的数进行精确的运算。
2)禁止使用BigDecimal(double),存在进度损失风险。
反例:如BigDecimal g = new BigDecimal(0.1F),实际存储值为0.10000000149。
正例:优先推荐使用入参为String的构造方法,或使用BigDecimal的valueOf方法。
BigDecimal bg1 = new BigDecimal("0.1");
BigDecimal bg2 = BigDecimal.valueOf(0.1);
所有整数型包装类对象值的比较,使用equals方法进行比较的更多相关文章
- 为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ...
- C#中在比较自定义对象的时候要重写Equals方法
using System;using System.Collections.Generic;using System.Text; namespace Equal{ using System; c ...
- 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?
这个得看情况,如果该对象重写了equals方法,那么可能会出现equals相同,但hashcode不同的情况,但假如没有重写equals方法,那么它默认继承是Object的equals方法,根据源码可 ...
- java包装类和值类型的关系
java包装类总是让人疑惑 它与值类型到底是怎么样一种关系? 本文将以int和Integer为例来探讨它们的关系 java值类型有int short char boolean byte long fl ...
- 【JVM】Java 8 中的常量池、字符串池、包装类对象池
1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是 ...
- 比较两个Long对象值
比较两个Long对象的值是否相等,不可以使用双等号进行比较,(long int Integer可以用双等号进行比较)可以采用如下方式: 1.使用equals方法进行比较 Long a=new Long ...
- hashCode之一--两个对象值相同,有相同的hash code
两个对象值相同(x.equals(y) == true),则一定有相同的hash code. 这是java语言的定义: 因为:Hash,一般翻译做“散列”,也有直接音译为"哈希" ...
- php 数组 类对象 值传递 引用传递 区别
一般的数据类型(int, float, bool)不做这方面的解说了 这里详细介绍一下数组和的类的对象作为参数进行值传递的区别 数组值传递 实例代码: <?php function main() ...
- 关于js对象值的传递
结合红宝书和网上的一些文章,记录下自己对关于js对象的值的传递的一些理解. js对象是保存在堆内存中的,当把对象赋值给变量时,是把对象在堆内存的引用(地址)赋值给了变量,变量通过地址来访问对象.下面来 ...
随机推荐
- 日期类 Date
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- Scala概述及环境配置
一.概述 1.1 为什么要学Scala? Spark是新一代的内存级大数据的计算框架,是大数据学习的重要内容.随着Spark的兴起,同时也带动了Scala的学习,因为Spark就是Scala编写的.为 ...
- 使用纯swift代码文件制作framework
因为最近我们公司的一个客户要求我们使用swift编写程序并且将API封装成framework的形式提供给他们,所以我就开始了swift实践之路. 程序编写完之后,我就琢磨怎么封装成framework的 ...
- Solution -「LOCAL」「cov. HDU 6816」折纸游戏
\(\mathcal{Description}\) Link(削弱版). \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列 ...
- python好用的函数或对象
1.ljust.rjust "hello".ljust(10,"x") #将字符串hello做对齐,并且用字符'x'补到10个字符 #输出为:helloxxxx ...
- MySQL架构原理之体系架构
MySQL是最流行的关系型数据库软件之一,由于其体量小.速度快.开源免费.简单易用.维护成本低等,在季军架构中易于扩展.高可用等优势,深受开发者和企业的欢迎,在互联网行业广泛使用. 其系统架构如下: ...
- vue的事件监听
<div id="app"> <button type="button" @click="btnClick(a,$event)&qu ...
- MySQL高级优化
MySQL高级 1.索引是什么? (1)索引是排好序可以快速查找的数据结构 (2)方便快速查找,索引实际上也是一张表所以也是要占内存的 2.索引存在哪里? (1)InnoDB引擎 ①索引是和数据存放在 ...
- iceberg合并小文件冲突测试
基于iceberg的master分支的9b6b5e0d2(2022-2-9). 参数说明 1.PARTIAL_PROGRESS_ENABLED(partial-progress.enabled) 默认 ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...