浅析 LinkedList<Double>里的Double类型比较

如果我们开LinkedList并存入Double类型的数值,即使我们存入的数值一样,直接来比较这两个数值的大小也会报错

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       LinkedList<Double> ll1=new LinkedList<>();
      
       ll1.add(1.0);
       ll1.add(1.0);
    if(ll1.get(0)==ll1.get(1)) {
        System.out.println("Yes");
    }
    else {
        System.out.println("No");
    }
    }
    

}




而在使用>=或者<=或者<或者>时则会成功,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;

public class Main3 {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       LinkedList<Double> ll1=new LinkedList<>();

       ll1.add(1.0);
       ll1.add(1.0);
    if(ll1.get(0)>=ll1.get(1)) {
        System.out.println("Yes");
    }
    else {
        System.out.println("No");
    }
    }


}




这是为什么呢,这就涉及到Java的自动拆箱原理和==号的比较原理

先说==号的比较原理吧,在比较基本数据类型时,他比较的是基本数据类型的数值大小,但是引用数据类型时就是比较的数据的地址大小,

自动拆箱原理是Java的自动拆箱功能可以自动将一个对象类型转换成对应的基本类型。例如,从 Doubledouble。这主要用于算术运算和比较运算(如 <, >, <=, >=),因为这些操作符是为基本类型设计的。虽然自动拆箱会在需要时将 Double 转换为 double,但是等号 == 用于对象比较时不触发自动拆箱。这是因为 == 用于对象时其语义就是比较引用,而不是比较值。自动拆箱适用于需要数值比较的情况,如使用比较运算符 <, >, 或者在算术运算中。

所以以后在计算存入队列中的数值大小时有三种方法

第一:(不推荐)

将ll1.get(0)==ll1.get(1)改为ll1.get(0)-ll1.get(1)==0

这涉及到自动拆箱原理,但是容易混淆

第二:(推荐)

equals方法比较两个数值是否一样,

第三(推荐)

将数值优先转化为基本数据类型,再比较:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值