首页 > 代码库 > Java基础一:基本数据类型

Java基础一:基本数据类型

一、八种基本数据类型

  1、整数类型

    ①byte 占一个字节。 常用作缓冲数组。

    ②short 占两个字节 。

    ③int 占四个字节。 最常用。

    ④long 占8个字节。注意long类数值后面有一个后缀L。

  注意:*Java没有无符号(unsigned)整数。

     *所有的数值类型所占据的字节数与平台无关,保证了可移植性。

  2、浮点类型

    ①float 占四个字节。后缀带有一个F。例:float f=3.4L;

    ②double 占8个字节。默认是double类型。例:3.14

  注意:*double的精度是float的两倍,一般情况下能够使用double就不要使用float,否则使用不当容易出现意想不到的异常。

     现代计算机搞运算能力下,可以忽略它们被处理的速度差异。

     *有三个特殊的浮点数值:正无穷大(Double.POSITIVE_INFINITY)、负无穷大(Double.NAGATIVE_INFINITY)、NaN(Double.NaN)。

     则三种数值一般很少用到。另外判断非数值不能使用==号,而是使用Double.isNaN(验证对象)。

     *浮点数不能使用在禁止出现四舍五入的场合,比如金融计算中。浮点数相乘除和相减都会出现误差。金融计算可以使用BigDecimal类,或者

     借助第三方库。

  3、文本类型

     ①char 字符常量为单引号括起来的字符。

  注意:*Java字符采用Unicode编码。一个字符占两个字节(一个字符是肯定可以容纳一个汉字的)。

  4、逻辑类型

    ①boolean

  注意:Java中不可以使用0或者非0的整数代替true或false。这点与c不同要小心。 

  5、引用数据类型(类、接口、数组)

 

二、数值之间的类型转换

  当整型、字符型、浮点型数据在混合计算中相互转换的时候(Boolean类型不可以转换为其它类型,再次强调它不能够转换为0或1),遵循以下转换规则

  1、向上转型(自动转换)

    精度小的类型会自动转换为精度大的类型:byte、char、short->int->long->float->double。byte、char、short不会直接相互转换,它们在转换过程中先要转换

  为int类型。

  2、向下转型(强制转换)

    精确度大的类型转换为精确度小的类型:需要加上强制转换符。但要十分小心,很容易造成精度下降或者溢出(有时候会造成莫名奇妙的bug)。

  例如:short s1 = 1; s1 = s1 + 1;// 编译错误。1是int类型,s1 + 1运算时s1会自动向上转型成为int型,s1 + 1运行结果也为int型,赋值给s1的时候是向下转型。需要强制转换。

  例如:而short s1 = 1; s1 += 1;// 正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

  例如:float f=3.4;// 编译错误。3.4是double类型,转换为float类型时是向下转型,需要强制转换:float f = (float)3.4;

  3、多种数据类型混合在一起计算的时候,要转换为精度最大的数据类型后再进行计算。

 

三、一些常见的问题

  1、Java一个汉字占几个字节:http://www.cnblogs.com/God-/p/6006749.html

  2、基本数据类型的包装类型

    为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

 

一个与自动拆箱与装箱的无聊问题:  

public class Test03 {
 
    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
 
        System.out.println(f1 == f2);// 返回true
        System.out.println(f3 == f4);// 返回false
    }
}
  原因:如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1==f2的结果是true,而f3==f4的结果是false
 
3、String是Java基本数据类型吗?
 
  当然不是。如果不是应届毕业生,面试官问这个问题我感觉他在逗你玩。
 
 

 

 

     

 

Java基础一:基本数据类型