数据类型精度:
byte 8 位
short 16 位
int 32 位
long 64 位
float 32 位
double 64 位
char 16 位
boolean 占几位要看 jvm 的具体实现, 虽然 Java 虚拟机定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持。在
Java 虚拟机中没有任何供 boolean 值专用的字节码指令,在 Java 语言之中涉及到 boolean
类型值的运算,在编译之后都使用 Java 虚拟机中的 int 数据类型来代替。
public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("基本类型:short 二进制位数:" + Short.SIZE); System.out.println("包装类:java.lang.Short"); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("基本类型:int 二进制位数:" + Integer.SIZE); System.out.println("包装类:java.lang.Integer"); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本类型:long 二进制位数:" + Long.SIZE); System.out.println("包装类:java.lang.Long"); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本类型:float 二进制位数:" + Float.SIZE); System.out.println("包装类:java.lang.Float"); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本类型:double 二进制位数:" + Double.SIZE); System.out.println("包装类:java.lang.Double"); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本类型:char 二进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character"); // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台 System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }
【运行结果】
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
1、boolean 型不能进行类型转换,布尔运算运算元和三元运算的第一个运算元的数据类型都必须是boolean型
2、低精度类型可以赋给高精度类型变量并自动转换为高精度
3、高精度类型赋给低精度类型需要使用强制类型转换
4、char 与 byte short 之间的类型转换需要通过强制类型转换,char 可以直接转 int long float double
5、char byte short int long float double 可以直接运算,自动发生类型转换, 转换顺序由低精度转向高精度
6、高精度转低精度的方式是截取二进制地位,直接扔掉高位,
比如 int 100927 转 short,100927 二进制有17位:11000101000111111 ,截取低位的16位,1000101000111111 的值是 -30145(最高位为1表示负数)
7、隐含的强制类型转换:整数的默认类型是 int
8、基本数据类型与字符串执行 + 操作时,基本数据类型被装箱并调用装箱后对象的 toString() 方法得到字符串,然后进行字符串拼接
9、基本数据类型的变量并不会自动拥有其装箱后的类型的方法,需要进行强制转换,例如, int 类型和 Integer 类型不是同一个类型,int 类型变量想调用 Integer 类型的方法需要把 int 转换成 Integer
int i1 = 100927; short s1 = (short)i1; char c1 = (char)i1; System.out.println(s1); //-30145,二进制 1000101000111111 System.out.println(c1); //訿,二进制1000101000111111, unicode 35391
int a = 123; String b = "abc"; boolean c = false; Boolean c2 = (Boolean)c; String d = a+b+c; System.out.println(d);//123abcfalse System.out.println(c2.toString());//false