所有整数型包装类对象值的比较,使用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对象是保存在堆内存中的,当把对象赋值给变量时,是把对象在堆内存的引用(地址)赋值给了变量,变量通过地址来访问对象.下面来 ...
随机推荐
- Elasticsearch使用系列-.NET6对接Elasticsearch
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...
- 解决使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused问题
使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused的问题 问题描述: 主机与虚拟机可以互相ping通: 防火墙已经关闭 使 ...
- 继承及属性查找+super()和mro()+多态
继承及属性查找+super()和mro()+多态 一. ★继承 1. 什么是继承? 继承就是新建类的一种方式,新建的类我们称为子类或者叫派生类,被继承的类我们称为父类或者基类 子类可以使用父类中的属性 ...
- Solution -「CF 802C」Heidi and Library (hard)
\(\mathcal{Descriptoin}\) Link. 你有一个容量为 \(k\) 的空书架,现在共有 \(n\) 个请求,每个请求给定一本书 \(a_i\).如果你的书架里没有这本书 ...
- 关于TP90 TP99 等常用于评估软件系统的处理性能的指标概念
工作中还是蛮少直接接触到评估系统性能的,但是不妨碍有兴趣了解.认为这是常识,只是个人才疏学浅不了解其定义. TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数.中位数都是 ...
- [LeetCode]1313. 解压缩编码列表
给你一个以行程长度编码压缩的整数列表 nums . 考虑每对相邻的两个元素 [freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后 ...
- uni-app支付宝支付成功代码处理,获取trade_no数据
uni-app支付宝支付成功以后返回很多代码,我简单梳理一下,提出trade_no数据 uni.requestPayment({ provider: 'alipay', orderInfo: orde ...
- [Java]Java入门笔记(一):IDE设置、部分快捷键
一.Eclipse 软件设置 注意 同一时间,工作空间只能使用1个. 1.1 创建程序的步骤 创建项目Java Project 注意:项目名不要使用数字,也不要以数字开头: 选择"Use d ...
- jemter参数化是如何取值的?(数据分配)
参数化文件数据 脚本设置 ${__threadNum}是线程号,${n}是取值 测试结果 第一次 线程1取值:1,4,7,10,12 线程2取值:2,3,6,11,16 线程3取值:5,9,15,17 ...
- DoS,DDoS,DRoS攻击