前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java日常使用容易出错的几个地方(一)

Java日常使用容易出错的几个地方(一)

作者头像
晓果冻
发布2022-09-08 13:44:42
1680
发布2022-09-08 13:44:42
举报
文章被收录于专栏:一直在努力的Java菜鸡er

Java日常使用容易出错的几个地方(一)

equals方法的使用

Objectequals使用不当会出现空指针的情况

代码语言:javascript
复制
package com.company;
import java.math.BigDecimal;
/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
package com.company;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        String s = null;
        //System.out.println(s.equals("abc"));  会报java.lang.NullPointerException的错误
        System.out.println("abc".equals(s));
    }
}

推荐使用java.util.Objectsequals方法

代码语言:javascript
复制
package com.company;

import java.util.Objects;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        String s = null;
        System.out.println(Objects.equals(s,"abc"));
        System.out.println(Objects.equals("abc",s));
        //System.out.println(s.equals("abc"));
        //System.out.println("abc".equals(s));
    }
}
//看下源码就知道它不需要考虑空指针问题
    /**
     * Returns {@code true} if the arguments are equal to each other
     * and {@code false} otherwise.
     * Consequently, if both arguments are {@code null}, {@code true}
     * is returned and if exactly one argument is {@code null}, {@code
     * false} is returned.  Otherwise, equality is determined by using
     * the {@link Object#equals equals} method of the first
     * argument.
     *
     * @param a an object
     * @param b an object to be compared with {@code a} for equality
     * @return {@code true} if the arguments are equal to each other
     * and {@code false} otherwise
     * @see Object#equals(Object)
     */
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
整型包装类值的比较

包装类型的比较

代码语言:javascript
复制
package com.company;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        int i1 = 15;
        Integer i2 = 15;
        Integer i3 = new Integer(15);
        System.out.println(i1 == i2);//i1和i2都是引用编译时期存放在常量池中的地址  true
        System.out.println(i2 == i3);//i3是在堆中新new出来的 所以地址不等于常量池中的地址 false
        //不在-128~127范围内,Integer都会在堆上新创建一个对象,不会复用已有的对象
        int n1 = 130;
        int n2 = 130;
        Integer n3 = 130;
        Integer n4 = 130;
        System.out.println(n1 == n2);//true
        System.out.println(n3 == n4);// false 在-128~127之内equals和==的结果一样  在这个范围之外如果仅仅比较值是否一样需要用equals来比较   巨坑
    }
}
BigDecimal

比较大小

代码语言:javascript
复制
package com.company;

import java.math.BigDecimal;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.9");
        BigDecimal b = new BigDecimal("0.99");
        //-1 表示 a 小于 b,0 表示 a 等于 b , 1表示 a 大于 b
        System.out.println(a.compareTo(b));// -1
    }
}

保留n位小数

代码语言:javascript
复制
package com.company;

import java.math.BigDecimal;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        BigDecimal m = new BigDecimal("3.1415926");
        BigDecimal n = m.setScale(4,BigDecimal.ROUND_HALF_UP);
        System.out.println(n);// 3.1416
    }
}

初始化

代码语言:javascript
复制
package com.company;

import java.math.BigDecimal;

/**
 * @author 晓果冻
 * @version 1.0
 * @date 2021/6/23 7:45
 */
public class Demo {
    public static void main(String[] args) {
        Double d1 = 3.145926d;
        BigDecimal b1 = new BigDecimal(d1);//这种方式会丢失精度
        System.out.println(b1);//3.145925999999999778111714476835913956165313720703125
        BigDecimal b2 = new BigDecimal(String.valueOf(d1));
        BigDecimal b3 = BigDecimal.valueOf(d1);//BigDecimal.valueOf(d1)内部执行了Double的toString。Double的toString会自行截断
        BigDecimal b4 = new BigDecimal(d1.toString());
        System.out.println(b4);////3.145926
        System.out.println(b2);//3.145926
        System.out.println(b3);//3.145926
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java日常使用容易出错的几个地方(一)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档