java编程常见错误汇总 (持续更新)

本文总结了Java编程过程中常见的几个陷阱,包括使用String类型时的注意事项、大数据运算时的溢出问题、基础类型与包装类型的赋值区别、字符串转换时的小数点精度问题等。对于提高代码质量及效率有一定帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 判断String类型数据要用 "equals" 而非 "==", 否则会出现判断条件总是成立或者不成立而走入错误的 if 分支。

 

2. 较大数据进行 "*" 或者 "+" 运算时, 要在阿拉伯数字后面加上"L"防止溢出,在真实环境上吃过亏,debug花了不下半个小时啊~~~~谨记!!!

 

3. 基础类型数据不可以被赋值为 null, 直接赋值的话编译器当然会提示你这样做不对,但是隐式的赋值就不一定了,比如以下这种情况:

 

this.setRecommend_id(sm != null ? sm.getId() : null);

 

这里 recommend_id 为 int类型变量,setRecommend_id是它的set函数, sm是另外一个类,以上的写法编译器并不会指出它有错误,但是一旦 sm == null 成立,程序运行时就会抛出 NullPointerException 异常,所以平时一定要注意变量是用基础类型还是包装类型

 

4. String转为数字变量的时候要贴别注意小数点后位数,比如 String str = "3", Double.parseDouble(str)这个函数有可能会返回 3.0000000000001(原因我也不清楚,以后有时间有心情可以研究)。因此我们需要手动将输出结果四舍五入,比如:

String.format("%.2f", new Double(str)).toString()

 

5. 判断相等符号 "==" 经常会误写成 "=", 如果可以让编译器自己判断这种错误就好了,其实也不难,只要写代码时注意一些小trick即可:

int a = 0;
// 该写法容易出错
if (a == 0) {
    logger.info("OK")    
}
// 安全写法
if (0 == a) {
    logger.info("OK")    
}
// 如果误写为以下情形,编译器会报错
if (0 = a) {
    logger.info("OK")    
}

 

6. java当中的for each 循环中,被循环的主体不能为null,否则会报错,例如以下代码运行就会报错NullPointerException:

List<Integer> list = null;
        
 for (Integer e : list){
     System.out.println("e");
}

 

7. java当中有时候会出现 e.getmessage() 为空的情况,如下图所示:

        try {
        // 我的代码
        }catch (Exception e) {

            throw new RuntimeException("安卓通知基本信息设置出错" + e.getMessage());
        }   

其打印出来的信息可能是 runtimeException + null , 原因e.getMessage抓取的 NullPointerException(说明一下上文跳出的的exception就是nullPointerException)就是null。

那怎么办,简单,logger.error("",e) 是可以抓住这样的exception的。在上面加上一行,logger.error("msg", e)即可

8. java类内容打印,经过实验应该是调用 get 方法,特殊的地方是 boolean 值调用is方法, 值得注意的是get方法返回值要和原先值对应,比如原先是Boolean get函数的返回值换成了boolean,就打不出来了~~~

public class RecmndedMemInfo {
    

    private Boolean transfered; 

    public boolean getTransfered() { // 这里应该改成 Boolean, 否则打印为空
        return transfered;
    }

    public void setTransfered(Boolean transfered) {
        this.transfered = transfered;
    }

    public String toString(){
        try {
            return JSON.json(this);
        } catch (Exception e) {
            return "";
        }
        
    }
    
    public static void main(String[] args) {
        
        RecmndedMemInfo rm = new RecmndedMemInfo();        

        rm.setTransfered(null);
        
        System.out.println(rm); // 打印显示为空
    }
    
}

 

  

 

转载于:https://www.cnblogs.com/yxmfighting/p/7280911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值