基本数据类型

1.Java语言有8种基本数据类型


2.int类型
(1)int
是最常用的整数类型,一个int类型的变量占用4个字节,即32位的内存空间。Int的最大表示范围为:-231231-1,即-2147483648~2147483647,大约正负21个亿多些
(2)
整数直接量是int类型
a.
整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误
b.
除了通常的十进制数字形式,整数直接量也可以写成16进制的形式(以0X0x开头)或8进制的形式(以0开头)
如:

        int a =100000;// 10进制

        int b = 0x186a0;// 16进制

        int c = 0303240;// 8进制

 
(3)
两个整数相除,会舍弃小数的部分(注意:不是四舍五入),结果也是整数
如:

      inttotal = 87;

      int error = 23;

      int percent = error / total * 100;

      System.out.println(percent+"%");//结果为0%23除以87整数部分为0,乘以100,为0

      percent = 100 * error / total;

      System.out.println(percent +"%");// 结果为26%230除以87整数部分为26

(4)当两个整数进行运算时, 其结果可能会超过整数的范围而发生溢出,正数过大而产生的溢出,结果为负数;负数过大而产生的溢出,结果为正数
如:     

       inta = 2147483647;//int类型整数的上限

       int b = -2147483648;//int类型整数的下限

       a = a + 1;

       b = b - 1;

       System.out.println("a=" +a);//输出结果: a=-2147483648溢出,结果错误

       System.out.println("b=" +b);//输出结果: b=2147483647溢出,结果错误


3.long
类型
(1)
在表示整数时,如果int类型的范围不够,可以使用long类型,一个long型的变量占用8个字节(即64位),最大表示范围为:-263 ~ 263-1,即 -9223372036854775808 ~9223372036854775807
如果要表示long直接量,需要以 L l结尾
       long a =10000000000;//会有编译错误,因为10000000000编译器认为是int类型,而这个值,已经超出了int的范围

       long b = 10000000000l;//正确

(2)对于较大的整数运算(超过int的表达范围),可以使用long

        long distance1 = 10000 * 365 * 24 * 60 * 60 * 299792458l;//必须有一个long型数据参与的运算结果才是long

      System.out.println("distance1="+distance1);//distance1=547836957965889536结果正确

        long distance2 = 10000 * 365 * 24 * 60 * 60 * 299792458;

       System.out.println("distance2="+ distance2);

       //distance2=-1973211136 溢出,=号后面的数据默认为int类型,超出了范围,发生溢出

(3)JDK提供 System.currentTimeMillis()方法,返回197011日零点到此时此刻所经历的毫秒数,数据太大,故其数据类型为long
           long time =System.currentTimeMillis();

          System.out.println(time);//输出的结果为: 1399086735887

通过上面的代码可以看出,输出的结果已经超出int类型的最大值,因此,JDK设计的返回类型为long型,该方法常常被用于计时操作
 

4.double类型
(1)2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样,所以,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷
   double money = 3.0;

       double price = 2.9;

       System.out.println(money - price);//输出的结果是: 0.10000000000000009

如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal 类来实现
(2)浮点数的直接量有两种写法:1)通常写法,如:3.14、314、0.1、.5。 2)科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方
默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加“f”或“F”后缀

5.char类型
(1)字符类型char事实上是一个16位无符号整数(都是正数),这个值是对应字符的编码,Java字符类型采用Unicode字符集编码,而Unicode是世界通用的定长字符集,所有的字符都是16位来表示
例如:字符a实际的值为97,字符A实际的值为65,字符0实际的值为48
   char c1 = ‘’;//c1中存的是的编码

       char c2 ='\u4e2d';//‘4e2d’所对应的16Unicode编码的16进制表示形式

       System.out.println(c1);

       System.out.println(c2);

如上代码的输出结果:c1的值为中,c2值也为中,但c1和c2内部存储的其实是”中”这个字符所对应的Unicode码,即:一个无符号的整数
(2)对char型变量赋值
三种方式:
a.字符直接量:形如‘A’,变量中实际存储的是该字符的Unicode编码,一个char型变量只能存储一个字符

char c1 ='A';  
b.整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符

char c2 = 65; 
c.Unicode形式:形如‘\u0041’,Unicode字符的16进制形式

char c3 ='\u0041';

(3)使用转义字符
字符直接量需要包含在一对’’单引号之中,那如果想表示单引号’的字符时,需要怎么表示?想表示回车、换行符时,怎么表示?因为单引号为特殊意义的字符,那么,对于不方便输出的字符可以采用转义字符来表示

      char c ='\\';

       System.out.println(c);//输出的结果为:\

 


6.boolean类型

boolean类型适用于关系、逻辑运算, 表示某个条件是否成立, 只允许取值true或false,true表示条件成立, 而false表示条件不成立
boolean型变量经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系
    int age = 18;

          boolean isChild = age<16;

          System.out.println(isChild);// isChild的值为false

          boolean running =true;

          boolean closed =false;

 

7.类型间的转换
(1).类型间转换
a.自动类型转化(隐式类型转换):从小类型到大类型可以自动完成


b.强制转化:从大类型到小类型需要强制转换符
语法:(需要转换成的类型)变量
因为大类型的精度值大于小类型,取值范围大于小类型,所以,当使用强制转化时,有可能会造成精度的损失或者溢出,所以,在使用强制转化时要求显式的告诉编译器,正在进行强制转换
(2).强制转换时的精度丧失和溢出
   int a = 100;

       int b = 200;

       long c = a + b;//自动将int转化为long

       long l1 = 1024l;

       int i = (int) l1;//需要加强制转化符由于1024int的范围内,所以没有产生溢出

       long l = 1024L * 1024 * 1024 * 4;

       int j = (int) l;//会产生溢出

       System.out.println(j);//结果为:0

       double pi = 3.1415926535897932384;

       float f = (float) pi;//会造成精度的损失,因为单精度的精确度小于double

       System.out.println(f);//结果为:3.1415927

(3).数值运算时的自动转换
如果在一个表达式中出现了多种数据类型,则运算结果会自动的向较大的类型进行转化
  //由于有long型的直接量参与,整个表达式的结果为long

       long distance = 10000 * 365 * 24 * 60 * 60 * 299792458l;

       //由于有double型的直接量599.0参与,整个表达式的结果为 double

       double change = 800 - 599.0;

       //结果为0.0,右边都是int型数据运算结果也为int类型,结果为0,再赋值给double

       //型,将0转化为 0.0

       double persent1 = 80 / 100;

       //结果为0.8,右边表达式有double型直接量参与,运算结果为double

       double persent2 = 80.0 / 100;

(4).byte、char、short转换为int
a.int直接量可以直接赋值给byte、char和short,只要不超过其表示范围

    byte b = 97;

          short s = 97;

          char c = 97;

b.byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算
       byte b = 97;

       int num = b + b;//num的值为194

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章