Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java日常使用容易出错的几个地方(一)

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

作者头像
晓果冻
发布于 2022-09-08 05:44:42
发布于 2022-09-08 05:44:42
21900
代码可运行
举报
运行总次数:0
代码可运行

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

equals方法的使用

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
线上问题排查总结
线上问题排查总结 Cpu飙高可能的原因 CAS自旋 没有控制自旋次数;乐观锁 死循环----cpu飙高的问题;控制循环次数 云服务器redis被注入挖矿程序;端口像公网暴露;Redis端口不要被外网访问,ip黑名单 服务器被DDOS攻击导致cpu飙高。限流ip、黑名单,图形验证码。 Windows系统排查cpu飙高方法 制造死循环让cpu飙高的代码 package com.company; /** * @author 晓果冻 * @version 1.0 * @date 2021/6/23 7:45
晓果冻
2022/09/08
3060
线上问题排查总结
反射学习
代码仓库地址:https://gitee.com/cgd0526/demo/tree/master/src/main/java/com/example/test/%E5%8F%8D%E5%B0%84
晓果冻
2022/09/08
1990
Java 常用类
String a="hello"+"abc";//==>优化等价 String a="helloabc";
用户9615083
2022/12/25
6490
Java 常用类
Spring5 入门案例
# Spring5 入门案例 下载Spring5 案例演示 # 下载Spring5 使用Spring稳定版本5.2.6 下载地址repo.spring.io (opens new window) 第一次访问速度有点慢,耐心等待。 下载完毕 # 案例演示 打开idea,创建普通Java工程 导入Spring5相关jar包 或者使用maven引入相关依赖 <dependencies> <dependency> <groupId>or
用户9615083
2022/12/25
4210
Spring5 入门案例
剑指Java-常用类
​ 是一套被反复使用的代码设计经验总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,Java常用的设计模式有23种
上分如喝水
2021/08/16
9430
剑指Java-常用类
Java基础-基本数据类型之间的转换
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/12
5450
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
============================================================================= ======================
黑泽君
2019/02/25
6730
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
Java学习笔记——Java常用类
String是一个final类,代表不可变的字符序列,底层使用char[]存放。一个字符串对象一旦被配置,其内容是不可变的。
梦飞
2022/06/23
4580
Java 基础知识点(必知必会其一)
如何将字符串转换为数字? 2.如何将数字转换为十六进制字符串? 1 package Day_2; 2 /** 3 * @author Administrator 4 * 功能: 如
Gxjun
2018/03/26
1.1K0
2013第四届蓝桥杯Java组省赛题解析
2013第四届蓝桥杯Java组省赛题解析 目录 第一题:高斯日记 第二题:马虎的算式 第三题:第39级台阶 第四题:黄金连分数 ​第五题:前缀判断 第六题:三部排序 ​第七题:错误票据 第八题:翻硬币 第九题:带分数 第十题:连号区间数 第一题:高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天
红目香薰
2022/11/29
3660
2013第四届蓝桥杯Java组省赛题解析
新手小白学JAVA 正则表达式 包装类 自动装箱/自动拆箱 BigDecimal
正确的字符串格式规则。 常用来判断用户输入的内容是否符合格式的要求,注意是严格区分大小写的。
全栈程序员站长
2022/08/15
3360
新手小白学JAVA 正则表达式 包装类 自动装箱/自动拆箱 BigDecimal
Java-常用类
哈喽!大家好,我是小简。今天开始学习《Java-常用类》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
3960
Java-常用类
【15】JAVASE-常用工具类【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
1950
【15】JAVASE-常用工具类【从零开始学JAVA】
Java匹马行天下之JavaSE核心技术——工具类
Byte 类将基本类型 byte 的值包装在一个对象中。一个 Byte 类型的对象只包含一个类型为 byte 的字段。 
泰斗贤若如
2019/06/18
6070
Java日常开发的21个坑,你踩过几个?
最近看了极客时间的《Java业务开发常见错误100例》,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~
捡田螺的小男孩
2020/12/29
1.4K0
Java日常开发的21个坑,你踩过几个?
大部分Java程序员都会忽略的几个问题
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
Java技术江湖
2019/09/24
5900
大部分Java程序员都会忽略的几个问题
Java常用类应用详解
可以通过图查询到其含有的字段和方法,jump to source 可以查看到源码。
timerring
2023/05/01
5030
Java常用类应用详解
【Java面试题系列】:Java基础知识面试题,看这一篇就够了
参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定要不要继续此次面试,如果答的不好,有些公司可能会直接说“技术经理或者总监在忙,你先回去等通知吧”,有些公司可能会继续面试,了解下你的项目经验等情况。
用户5546570
2019/06/06
5080
花了几个小时总结了一些容易出错的 Java 知识点
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
Java_老男孩
2019/12/19
5760
深入剖析Java中的装箱和拆箱
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。
哲洛不闹
2018/09/14
5850
深入剖析Java中的装箱和拆箱
相关推荐
线上问题排查总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验