java数值比较
import org.junit.Test; public class NumberCompare { /**
* 数值比较,以Float为例
*/
@Test
public void testName1() throws Exception { // Float装箱
Float f = 12.1f; // 等同:Float f = new Float(12.1);
Float f2 = 12.1f; /*
* 结果全是false
*/
System.out.println(f.equals(12.1));
System.out.println(f == 12.1);
System.out.println(f.floatValue() == 12.1);
System.out.println(f == f2); /*
* 为什么结果全是false?
* --------------------------------
* 1. equals()方法
* 如果是引用类型间的比较:
* equals()方法的参数可以传入任何对象。但是如果[传入参数的数据类型]和[方法所属对象的类型]不一致,就会直接返回false。
* 只有[传入参数的数据类型]和[方法所属对象的类型]一致时,才会继续对值进行比较。
*
* 如果是引用类型和基本类型进行比较:
* 如果传入的参数时基本类型,会对参数自动装箱,变成引用类型间的比较。
*
* 2. == 用于引用类型的比较和基本类型的比较。
* 如果是引用类型间的比较:
* 直接比较内存地址,不同就返回false.不会对具体数值进行比较。
*
* 如果是基本类型间的比较:
* 类型相同时,才会比较。类型不同时,会返回false,或直接编译不通过。
*
* 如果是引用类型和基本类型进行比较:
* 会将引用类型拆箱,转成基本类型后,在进行基本类型间的比较。
*
* 总结:
* 数据类型相同的值,才有比较的意义。
* 数据类型不同的值,不要放在一起比较。如果一定要比较,先转换成相同的类型再比较。
*/ /*
* 换个写法,结果全是true
*/ // equals() : 引用类型间的比较
System.out.println(f.equals(f2));
System.out.println(f.equals(new Float(12.1))); // equals() : 引用类型和基本类型的比较
System.out.println(f.equals(12.1f)); // 会先将基本类型装箱 // == : 基本类型间的比较
System.out.println(f.floatValue() == 12.1f); // == : 引用类型和基本类型的比较
System.out.println(f == 12.1f); // 会先将引用类型拆箱 float f3 = 12.1f;
System.out.println(f == f3);
}
}
java数值比较的更多相关文章
- Java 数值类型以及计算
前段时候写了一个对外提供的接口,其中有一个数值校验的计算.在测试的过程中发现5.6-1.6 != 4,在反复的测试过程中发现double类型的数值为有精度丢失的现象,看来还是基础知识不牢固,所以就在网 ...
- Java数值类型之间转换
Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...
- Java数值传递的时候,到底是引用传递还是值传递
java中既有引用传递也有值传递 ---->>方法形式参数上 1.值传递,基本数据类型 值传递是:传递的是存储单元中的内容,而不是存储单元的引用. 2.引用传递:引用类型,数组,集合. 引 ...
- Java数值避免浮点型计算丢失精度问题
问题描述及方案 假设我们在做电商项目,在进行计算时这个丢失精度在产品价格计算就会出现问题,很有可能造成我们手里有9.99元然后后面会有一堆9,但是呢这些钱无法购买一个10元的商品. 在某些编程语言中有 ...
- java数值运算后精度丢失问题
最近连续俩次遇到运算后数值精度丢失问题,所以记录一下. 问题1:java计算百分比,应该得到57,可返回的就是56 在java代码中 BigDecimal progress; BigDecimal a ...
- 初学Java 数值运算符
import java.util.Scanner; public class DisplayTime { public static void main(String[] args) { Scanne ...
- Java数值转化为二进制、十进制、十六进制字符串
int i = 123;String binStr = Integer.toBinaryString(i); String otcStr = Integer.toOctalString(i); Str ...
- java数值类型之间的转换
说明:图中6个实心箭头代表转换无信息丢失,3个虚线箭头表示可能有精度损失的转换.
- java.sql.Types,数据库字段类型,java数据类型的对应关系
以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...
随机推荐
- c# 后台绑定treeview 多个tab
<wijmo:C1Tabs ID="C1Tab1" runat="server" ><%--OnSelectedChanged="& ...
- 11-8 定时器this
定时器this问题 var t=setInterval(function(){ console.log(this) },1000) 这里面的this是window Person.prototype={ ...
- springboot邮件发送与接收读取
发送邮件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上
开始 -> 运行 -> inetmgr -> 应用程序池 -> 找到 我的网站对象的 程序池 -> 右键 -> 高级设置 -> 启用32位应用程序 由 fal ...
- Javascript 面向对象的编程思想
面向对象,首先得有类的概念,没有类造不出来对象,,Javascript把函数名看成类. 其次分为不同结构层,如三层架构.MVC.MVVM. 本文根据实际项目演练,分为几个适用的结构层,如果项目不大一般 ...
- grid - 使用相同的名称命名网格线和设置网格项目位置
1.使用repeat()函数可以给网格线分配相同的名称.这可以节省一定的时间 使用repeat()函数可以给网格线命名,这也导致多个网格线具有相同的网格线名称. 相同网格线名称指定网格线的位置和名称, ...
- Linux输入子系统框架分析(1)
在Linux下的输入设备键盘.触摸屏.鼠标等都能够用输入子系统来实现驱动.输入子系统分为三层,核心层和设备驱动层.事件层.核心层和事件层由Linux输入子系统本身实现,设备驱动层由我们实现.我们在设备 ...
- ios the request was denied by service delegate for reason unspecified
报错的情况如下: xcode8(The request was denied by service delegate (SBMainWorkspace) for reason: Unspecified ...
- TensorFlow+Keras 03 TensorFlow 与 Keras 介绍
1 TensorFlow 架构图 1.1 处理器 TensorFlow 可以在CPU.GPU.TPU中执行 1.2 平台 TensorFlow 具备跨平台能力,Windows .Linux.Andro ...
- securecrt8.1破解版安装与注册机的使用方法
转自:https://blog.csdn.net/sun897827804/article/details/78532157?locationNum=9&fps=1 SecureCRT是一款用 ...