`

Java基本类型与对象类型的区别导致的Bug剖析

 
阅读更多

一个很简单的例子,原文地址:http://www.taobaotest.com/blogs/2544

======================================原文开始===============================

本文中所提到的基本类型是指类似 int,long等,而对象类型是指Integer,Long等。

基本类型和对象类型第一个最大的不同在于初始化的值不同。int 初始化为0,Integer 为null。在一个线上产品故障的排查过程中发现根本原因在于开发同学把数据库DO对象的一个字段从int 改成了Integer引起的,因为int 类型可以正常的初始化,而Integer 对象的时候不能正常插入,导致了线上产品故障。

正是由于初始化的值的不同,也导致了在进行逻辑比较的时候,对象类型很容易出现空指针异常:

基本类型可以直接进行逻辑判断:

int num;

if( num >0 ){

//todo

}

这样的代码不会有空指针的异常,但是如果是如下代码:

Integer num;

if( num >0 ){

//todo

}

就会有空指针异常。这种异常特别容易出现在web的参数处理上:

例如:

public class MyTest {

    @Autowired     private HttpServletResponse response;

    public void execute(@Param("pageSize") Integer pageSize) throws Exception {
       //todo
       //这里容易空指针异常
       if( pageSize<=0 ){
          pageSize = 1;
       }
       //todo
    }
}

第二个不同在于基本类型没有可执行的方法,而对象类型支持很多封装的方法,例如Integer 对象 可以使用toString()的方法。

第三个不同在于基本类型不能作为List或者Map的类型,例如:

List<int>  numList = new ArrayList<int>();  //这样是不可以的。

 

======================================原文结束===============================

以下是自己的测试代码:

public class NullTest {
	
	public static Integer test;
	public static void main(String[] args) {	
		System.out.println(test == null);
		System.out.println(test > 0);

	}

}

 输出:

true
Exception in thread "main" java.lang.NullPointerException
	at com.ssgx.ssa.test.NullTest.main(NullTest.java:8)

 

分享到:
评论

相关推荐

    Java Bug模式详解 pdf版

    书中深入剖析了Java编程中常见的bug模式,通过实例解析,让读者能够识别并预防这些模式,从而减少程序中的错误,提高软件的稳定性和可靠性。 在Java编程中,bug模式通常指的是那些反复出现的、容易导致程序出错的...

    Java.Bug模式详解

    《Java Bug模式详解》这本书是Java开发者们的重要参考资料,它深入剖析了在编程过程中常见的错误模式,即“Bug模式”,并提供了详细的解决策略。Bug模式是程序员在编码时容易犯的错误,理解并掌握这些模式有助于提升...

    解锁大厂思维_剖析 阿里巴巴 Java 开发手册 晋升加薪必备

    这些规约不仅关乎代码风格,也涉及性能优化和潜在的bug预防,比如对Integer缓存问题的分析,防止因对象创建过多而导致的内存浪费。 异常日志部分,强调了如何正确处理和记录异常,以便于问题定位和排查。例如,如何...

    俄罗斯方块java程序

    《Java编程实现俄罗斯方块游戏详解及问题剖析》 俄罗斯方块是一款经典的电子游戏,源自苏联,因其简单易上手且具有高度挑战性而深受玩家喜爱。在IT领域,用编程语言实现俄罗斯方块是一种常见的教学实践,可以锻炼...

    java源码剖析-Freemind-Maintainability-Report:在Freemind的源代码上执行可维护性分析。这是一个用Ja

    例如,高复杂性的类或方法可能难以理解和修改,而重复的代码则可能导致维护困难和bug的滋生。 此外,良好的模块化设计是提高代码可维护性的关键。Java的包和接口机制使得我们可以将代码划分为独立的组件,每个组件...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中...

    CTorrent程序源码分析

    选择CTorrent作为分析对象的原因在于,尽管它是C++代码,但大多数部分可以用C语言的知识来理解,特别适合那些不熟悉Python或Java的开发者。CTorrent的源码结构清晰,使用了C++的类概念,但没有过多复杂的特性,对于...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中...

Global site tag (gtag.js) - Google Analytics