现在的位置: 首页 > 综合 > 正文

java基本数据类型

2013年01月02日 ⁄ 综合 ⁄ 共 2626字 ⁄ 字号 评论关闭

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

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

在Java中可以使用取余的方式来进行奇数还是偶数的判断,请看以下代码 

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



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

Java代码  收藏代码
  1. public static int remainder(int dividend, int divisor) {  
  2.         return dividend - dividend / divisor * divisor;  
  3.     }  



      现在一切就明了了,-1的运算结果还是-1,以后记得写成num % 2 == 0 

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

3.注意类型的默认转换 
     在Java当中,当大的类型与小类型进行运算时,该运算会自动提升为大类型,这种转换成为加宽类型,例如long类型和int类型进行运算后会自动提升为long类型,请观察一下代码 

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.         // 2147483647为int最大值  
  3.         long num = 2147483647 + 1;  
  4.         System.out.println(num);  
  5.         // 运行结果为 -2147483648  
  6.     }  



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

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

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.         // int类型最大值  
  3.         int maxInt = Integer.MAX_VALUE;  
  4.         // int类型最小值  
  5.         int minInt = Integer.MIN_VALUE;  
  6.         // long类型最大值  
  7.         long maxLong = Long.MAX_VALUE;  
  8.         // long类型最小值  
  9.         long minLong = Long.MIN_VALUE;  
  10.         // short类型最大值  
  11.         short maxShort = Short.MAX_VALUE;  
  12.         // short类型最小值  
  13.         short minShort = Short.MIN_VALUE;  
  14.   
  15.     }  

5.注意数值的边界判断 
      请来观看下面的代码 

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.         test(Integer.MAX_VALUE + 1);  
  3.     }  
  4.   
  5.     public static void test(int num) {  
  6.         if (num < 2000) {  
  7.             System.out.println("执行");  
  8.         }  
  9.     }  



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

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

7.理解基本类型-->包装类型装箱拆箱过程 
      以下为Intger类型例子,Double和Float等同理 
      从基本类型-->包装类型是调用包装类型的valueOf()方法来进行转换 
      从包装类型-->基本类型是调用包装类型的intValue()方法来进行转换 
8.优先选择基本类型 
      我们都知道,基本类型是存在栈的,而包装类型因为是类,对象,所以是存在堆中,在处理速度上,由于基本类型是原生类型,所以速度更快,其实换个思维也可以思考到,包装类型封装了属性和方法,生成的速度会比基本类型慢,而且当包装类型进行运算时,都将调用intValue()方法然后再调用valueOf()方法封装回包装类型,所以在可行的情况下,优先选择基本类型,但在特定的框架例如Hibernate中,推荐使用包装类型 

抱歉!评论已关闭.