随笔⑦ Java中的比较 ==,equals以及精度对比较的影响

Java中的比较 ==,equals

① 对于==,如果是作用于基本数据类型的变量,则直接比较其存储的"值"是否相等;如果是作用于引用类型的变量,则比较的是所指向的对象的地址。

② 对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型变量所指向的对象的地址;诸如String,Date等类对equals方法进行了重写的话比较的是所指向的对象的内容

Float类型值的比较

一般情况下,浮点数是不直接进行判等比较的因为浮点数存在精度问题。要比较两个浮点数,一般的比较方法是设定一个精度,当二者的差小于某个精度时,认为二者相等。例如:s,t为float类型。

1 if (Math.abs(s - t) < 0.001) {
2     System.out.println("equal");
3 }else {
4     System.out.println("not equal");
5 }

④ Float类和Double类都重写了对应的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小

JDK1.8的源码如下:

1.Float类重写了equals方法:

1 public boolean equals(Object obj) {
2       return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
3 }

2.Double类重写了equals方法:

1 public boolean equals(Object obj) {
2        return (obj instanceof Double)&& (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
3 }

--------------------------------------------------------------------------------------------------------使用实例------------------------------------------------------------------------------------------------------------------------

1 public class Test{
2     public String name="abc";
3     public static void main(String[] args){
4         Test test=new Test();
5         Test testB=new Test();
6         System.out.println(test.equals(testB)+","+test.name.equals(testB.name)); //注意test.equals(testB)是两个对象之间的比较;test.name.equals(testB.name)是String类型的比较
7  }8 }

【解析】对于对象的比较,使用Object类的比较器如下所示:

1 public boolean equals(Object obj) {
2         return (this == obj);
3 }

没有重写equals时,是直接用==判断的。而String中重写了equals方法。

时间: 2024-11-20 00:01:43

随笔⑦ Java中的比较 ==,equals以及精度对比较的影响的相关文章

Java中的==和equals方法详解

Java中的==和equals   1.如果比较对象是值变量:只用== 2.如果比较对象是引用型变量: ==:比较两个引用是不是指向同一个对象实例. equals: 首先Object类中equals的实现是直接调用了==操作. 一个自定义类继承自Object且没有重写equals方法,那么其equals操作也是与Object类一样,仅仅是直接调用==操作. 如果一个类重写过equals方法(或者继承自一个重写过equals方法的类),那么效果与==操作不同 如果是你自己定义的一个类,比较自定义类

Java中的==和equals区别

引言:从一个朋友的blog转过来的,里面解决了两个困扰我很久的问题.很有久旱逢甘霖的感觉. 中软国际电子政务部Jeff Chi总结,转载请说明出处. 概述:        A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同:当用于引用类型的时候,是比较对象是否相同.        B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的.        C.基本类型没有equals方法,equals只比较值(对象中的

精确计算java中float和double的精度

[本文相关的代码放在github上,地址为:https://github.com/VigourJiang/StructuredFloat] Java中double类型的格式是遵循IEEE 754标准的.尽管数学意义上的小数是连续的,但double仅仅能表示其中的一些离散点,把这些离散点组成的集合记为S,S的大小还是有限的.如果要保存的小数P刚好在集合S内,那么double类型就能精确的表示P:否则double类型只能从集合S中找一个与P最近的离散点P'代替P. 以上表述对于float也成立.IE

java中的==、equals()、hashCode()源码分析(转载)

在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: 1 public class ComAddr{ 2 public static void main(String[] args) throws Exception { 3 String s1 = "nihao"; 4 String s2 = "nihao"; 5 Str

java中的==、equals()、hashCode()

java中的==.equals().hashCode()源码分析 在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: 1 public class ComAddr{ 2 public static void main(String[] args) throws Exception { 3 String s1 = "nihao"; 4 Str

java中的==和equals的区别

关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指正,谢谢. 在JAVA程序中一般的基本类型(值类型int,double,boolean等)都只能通过 = = 来判断值是否相等. 如:System.out.println(1==1);System.out.println(true==true);√ 不能写成System.out.println(1.

面试点:Java 中 hashCode() 和 equals() 的关系

Java 中 hashCode() 和 equals() 的关系是面试中的常考点,如果没有深入思考过两者设计的初衷,这个问题将很难回答.除了应付面试,理解二者的关系更有助于我们写出高质量且准确的代码. 一.基础:hashCode() 和 equals() 简介 在学习 hashCode() 和 equals() 之间的关系之前, 我们有必要先单独地了解他俩的特点. equals() equals() 方法用于比较两个对象是否相等,它与 == 相等比较符有着本质的不同. 在万物皆对象的 Java

关于java中Double类型的运算精度问题

标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.

Java 中的== 和equals()方法

Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值. 2.引用数据类型(类) 当它们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. Java当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equa