zoukankan      html  css  js  c++  java
  • JAVA基本数据类型转换的注意事项

    JAVA中基本数据类型:

    类型: 字节: 范围: 默认值:
    byte 1 -128~127 0
    short 2 -32768~32767 0
    char 2 0~65535 'u0000'
    int 4 -2147483648~2147483647 0
    long 8 -2^63~2^63-1 0L或0l
    float 4 3.402823e38~1.401298e-45 0.0F或0.0f
    double 8 1.797693e308~4.9000000e-324 0.0D或0.0d
    boolean 1 false 或 true false

    所以,基本数据类型的精度(亦称容量大小)排序为(从小到大):(byte->short->char)->int->long->float->double

    向下转换:(强制类型转换)

    当精度高的类型转到精度低的类型时叫做向下转换,向下转换需要强制转换,即使用 (类型名) 运算符,可能会导致精度降低或溢出。

    向上转换:(隐式类型转换)

    当精度低的类型转到精度高的类型时叫做向上转换,向上转换一般直接由编译器完成,当几个基本数据类型参与运算时,计算结果的类型是参与运算中精度最高的那个运算数的类型,其他运算数的类型将被自动转为精度最高的那个运算数的类型。

    之所以要给byte,short,char三个类型加上括号,是因为,当它们参与运算时首先会被提升为int类型,也就说明他们之间不会发生隐式类型转换。

    另外,boolean类型不会发生类型转换,即(boolean)运算符无意义,并且boolean类型只能被关键字 true 和 false,以及逻辑运算符的结果赋值。

    例如:

     1 byte a;
     2 short b;
     3 char c;
     4 int d;
     5 long e;
     6 a = a+a;//错误,a + a的类型为int,因为在计算时,byte类型的a变量被自动提升为int类型
     7 a = 'A';//正确,'A'是字符字面量,是一个常量,值为65,在byte范围内
     8 a = 12;//正确,可能会问,12这个字面量在java中是int类型,但是 a 是byte类型,为什么不报错呢,因为,编译器知道12在byte范围内,所以自动转为(short)12,但如果赋值的是a = 200,那就错误了,因为编译器知道200是超出byte范围的(在编译的时候,编译器只知道常量的值,知道它是否超出范围,编译器不知道变量的值,所以无法判断一个变量是否超出范围,因为变量的值是在运行的时候确定的)
     9 
    10 a = Byte.MAX_VALUE +1;//报错
    11 b = Short.MAX_VALUE +1;//报错
    12 c = Char.MAX_VALUE +1;//报错
    13 //上述三行报错原因是因为,byte,short,char三个类型参与计算时首先会提升为int类型,但在C语言当中(char和short类型)参与计算时不会被提升,所以在C语言中值为 -1
    14 d = Integer.MAX_VALUE +1;//值为-1
    15 e = Long.MAX_VALUE +1;//值为-1L
    16 //因为int和long类型不存在提升,所以会出现-1或-1L
  • 相关阅读:
    S2 第二章数据库的实现
    理解ThreadLocal(之二)
    理解ThreadLocal(之一)
    save(),saveOrUpdate(),merge()的区别
    Hibdernate入门
    Hibernate第一个例子
    在运行Hibernate Hello World程序的时候,抛如下错误: view plain Exception in thread "main" org.hibernate.exception.LockAcquisitionException 解决方法
    Oracle函数
    UDP
    多线程下真正的单例
  • 原文地址:https://www.cnblogs.com/ryzz/p/10541398.html
Copyright © 2011-2022 走看看