`

改善Java代码质量---数据类型

    博客分类:
  • Java
 
阅读更多

   

在Java当中有8种基本数据类型,分别是byte,char,short,int,long,float,double,boolean还有其对应的封装类型Byte,Character,Short,Integer,Long,Float,Double,Boolean,那我们究竟对他们有多少的了解呢? 

 

1.用偶判断,不用奇判断 

    在Java中可以使用取余的方式来进行奇数还是偶数的判断:

public static void main(String[] args) {  
        int num = -1;  
        System.out.println(num % 2 == 1 ? "奇数" : "偶数"); // 输出结果为偶数  
    }  

    从上面代码中,-1怎么可能是偶数呢?首先我们就需要了解Java是如何取余的 :

public static int remainder(int dividend, int divisor) {  
        return dividend - dividend / divisor * divisor;  
        //java中整数除以整数还是整数。
    }  

    -1 % 2的运算结果还是-1,以后记得写成num % 2 == 0 

 

2.对精确货币计算使用BigDecimal类型 

      在使用货币计算时,我们首先想到的是使用double类型,但在计算机世界中,浮点类型有可能是不准确的,他只能无限的接近某一个值,而不会完全精准,这是因为二进制的原因,就像用10进制无办法表示10 / 3一样,所以对于精确的货币计算,应该使用BigDecimal类型,而且BigDecimal和数据库中的NUMBER和DECIMAL类型很好的匹配。

 

3.注意类型的默认转换 

     在Java当中,当大的类型与小类型进行运算时,该运算会自动提升为大类型,这种转换成为加宽类型,例如long类型和int类型进行运算后会自动提升为long类型

public static void main(String[] args) {  
        // 2147483647为int最大值  
        long num = 2147483647 + 1;  
        System.out.println(num); // 运行结果为 -2147483648  
    }  

    以上代码中,2147483647为int类型的最大值,我使用long类型来接受int最大值+1应该是没问题的,但事实并不是如此,这是因为在Java中是先运算再进行类型转换的,二者都是int类型,所以运算结果也应该是int类型,所以超出了int类型的最大范围,此时应修改为2147483647L + 1

 

4.数值类型最大值应使用Java提供常量 

 

      在3的例子当中,我们使用了int的最大值214748364,当然读者可能是有超人的记忆把int的最大值和最小值记住了,但short类型long类型呢,所以我们应该使用Java自带的常量来获取数值类型的最大值和最小值

public static void main(String[] args) {  
        // int类型最大值  
        int maxInt = Integer.MAX_VALUE;  
        // int类型最小值  
        int minInt = Integer.MIN_VALUE;  
        // long类型最大值  
        long maxLong = Long.MAX_VALUE;  
        // long类型最小值  
        long minLong = Long.MIN_VALUE;  
        // short类型最大值  
        short maxShort = Short.MAX_VALUE;  
        // short类型最小值  
        short minShort = Short.MIN_VALUE;  
    }  

 

 5.注意数值的边界判断 

 

    public static void main(String[] args) {  
        test(Integer.MAX_VALUE + 1);  
    }  
    public static void test(int num) {  
        if (num < 2000) {  
            System.out.println("执行");  
        }  
    }  

 

    test方法的逻辑非常简单,若然int类型的数值少于2000就执行,当我使用int类型的最大值+1时,就因为类型越界而变成int的最少值,所以满足少于2000的条件从而执行方法,所以对于严谨的程序,应该进行 业务/正最大/负最小 的边界判断,特别是从前台接受过来的值。

 

6.提防包装类的null值 

    包装类型是基本类型的包装类,当使用包装类型时,其实就生成了对象,当然对象是允许为null的,所以需要注意包装类型的!null判断。

 

7.理解基本类型-->包装类型装箱拆箱过程 

    以下为Intger类型例子,Double和Float等同理:

    从基本类型-->包装类型是调用包装类型的valueOf()方法来进行转换 

    从包装类型-->基本类型是调用包装类型的intValue()方法来进行转换 

 

8.优先选择基本类型 

    基本类型是存在栈的,而包装类型因为是对象,所以是存在堆中,在处理速度上,由于基本类型是原生类型,所以速度更快。其实换个思维也可以思考到,包装类型封装了属性和方法,生成的速度会比基本类型慢,而且当包装类型进行运算时,都将调用intValue()方法然后再调用valueOf()方法封装回包装类型,所以在可行的情况下,优先选择基本类型,但在特定的框架例如Hibernate中推荐使用包装类型。

 

 

 

 

分享到:
评论

相关推荐

    JClass DesktopViews-专业的JAVA开发工具套件

    摘要 JClass DesktopViews 是一个集成Java组件的集合,帮助开发者快速有效的在客户端建立企业级应用程序,通过预建立,预测试以及专业的质量水准,加速了开发进程,改善了编码质量。同时还提供了一系列高级GUI功能,...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Oracle SQL高级编程...第15章 测试与质量保证 415 15.1 测试用例 416 15.2 测试方法 417 15.3 单元测试 418 15.4 回归测试 422 15.5 模式修改 422 15.6...

    asp.net知识库

    .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0) asp.net 2.0 新特性 Visual Web Development 2005开发ASP.NET使用小技巧 ASP.NET 2.0 ...

    最新基于SSM框架宠物医院信息管理系统.zip

    7. **用户反馈**:收集宠物主人的反馈意见,不断改善服务质量。 8. **员工管理**:管理医院员工的基本信息、排班、业绩统计等。 9. **数据分析报告**:生成宠物就医统计分析报告,辅助医院管理层做出决策。 10. **...

    【卷一/共两卷】AJAX实战pdf高清版90M

    11.3.2 服务器端的登录代码:用Java实现 11.3.3 客户端登录框架 11.4 实现DHTML窗口 11.4.1 门户窗口数据库 11.4.2 门户窗口的服务器端代码 11.4.3 添加外部JS库 11.5 添加Ajax自动保存功能 11.5.1 修改库的代码 ...

    软件框架设计的艺术

    3.9 如何检查API的质量 37 3.9.1 可理解性 37 3.9.2 一致性 38 3.9.3 可见性 39 3.9.4 简单的任务应该有简单的方案 40 3.9.5 保护投资 40 第4章 不断变化的目标 42 4.1 第一个版本远非完美 ...

    校内API开发. pdf

    将测试作为开发过程个不可分割部分时你代码质量就提高了重复测试很简单它也消除了由于改变代码而引起恐 惧 现在你已经知道了建立个公共应用结构步骤你已经做好准备将它们用于你企业了建立个积极小组让它们负责公 共...

    餐饮管理信息系统管理信息系统课程设计.doc

    其次,基于IPAD类型的触屏类电子产品已经极大的普及,我们完全可以生产一个点菜 PAD,且点菜PAD可以与收银端、厨师端 最后,C++、JAVA等面向对象程序设计语言已经完全可以轻易应付这一系统;另外数 据库系统也完全...

Global site tag (gtag.js) - Google Analytics