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数值比较的更多相关文章

  1. Java 数值类型以及计算

    前段时候写了一个对外提供的接口,其中有一个数值校验的计算.在测试的过程中发现5.6-1.6 != 4,在反复的测试过程中发现double类型的数值为有精度丢失的现象,看来还是基础知识不牢固,所以就在网 ...

  2. Java数值类型之间转换

    Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...

  3. Java数值传递的时候,到底是引用传递还是值传递

    java中既有引用传递也有值传递 ---->>方法形式参数上 1.值传递,基本数据类型 值传递是:传递的是存储单元中的内容,而不是存储单元的引用. 2.引用传递:引用类型,数组,集合. 引 ...

  4. Java数值避免浮点型计算丢失精度问题

    问题描述及方案 假设我们在做电商项目,在进行计算时这个丢失精度在产品价格计算就会出现问题,很有可能造成我们手里有9.99元然后后面会有一堆9,但是呢这些钱无法购买一个10元的商品. 在某些编程语言中有 ...

  5. java数值运算后精度丢失问题

    最近连续俩次遇到运算后数值精度丢失问题,所以记录一下. 问题1:java计算百分比,应该得到57,可返回的就是56 在java代码中 BigDecimal progress; BigDecimal a ...

  6. 初学Java 数值运算符

    import java.util.Scanner; public class DisplayTime { public static void main(String[] args) { Scanne ...

  7. Java数值转化为二进制、十进制、十六进制字符串

    int i = 123;String binStr = Integer.toBinaryString(i); String otcStr = Integer.toOctalString(i); Str ...

  8. java数值类型之间的转换

    说明:图中6个实心箭头代表转换无信息丢失,3个虚线箭头表示可能有精度损失的转换.

  9. java.sql.Types,数据库字段类型,java数据类型的对应关系

    以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...

随机推荐

  1. instanceof详解

    instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例: <?php class MyClass { } class NotMyClass { } $a = new ...

  2. 列表去重几种方法 python

    1.方法一: >>> a=[1,1,2,2,3,3] >>> b=[] >>> for i in a: ...     if i not in b ...

  3. JDBC接口

    Jmeter实例8:JDBC接口 加线程组.加JDBC配置信息: 配置信息详情如下:默认展示值不用修改 必填信息: Database UR:固定格式,将IP.端口号.数据库名修改成自己要用的数据库信息 ...

  4. django生产环节部署

    在linux下安装mysql yum install mysql-server mysql -u root(安装完后,你的root账户是没有密码的.所以你可以直接使用这条命令,就可以登陆控制台了) 如 ...

  5. HTML常用标签1

    1 html html:超文本标记(标签)语言 通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器渲染的顺序:从上到下,从左到右 对于不同的浏览器,对同一标签可能会有不完全 ...

  6. JDK提供的几种线程池比较

    JDK提供的几种线程池 newFixedThreadPool创建一个指定工作线程数量的线程池.每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中. ...

  7. Accounting Calendar template

    SELECT INITCAP (TO_CHAR (TO_DATE (&year || '-' || LPAD (ROWNUM, 2, '0'), 'yyyy-mm'), 'MON', 'NLS ...

  8. PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

    PL/SQL查询时,如果Number(17)以上的大数,会显示为科学计数法 解决方法: TOOLS->PREFERENCES->WINDOW TYPE->SQL WINDOW下选中N ...

  9. Unity3d如何profile模拟器

    最近有反馈X2在一些模拟器中运行偶尔非常卡,达到5秒左右,而这类问题在真机上没出现过,于是想用unity profile下模拟器.但模拟器是运行在虚拟机里面的,市面上大多模拟器并没有提供虚拟机网络设置 ...

  10. USE " cc.exports.* = value " INSTEAD OF SET GLOBAL VARIABLE"

    Cocos2d-x 3.5的lua项目生成后,变成了MVC模式,并且,加入了一个全局变量的检测功能.也就是说,你不小心用了全局变量,他会提示你出错! 比如 local temp = 1 temp = ...