long:long也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,808到9,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0。
byte:byte同样属于 整数类型,在存储的时候,用 1个字节来存储,范围为 -128到127,在变量初始化的时候,byte类型的默认值也为 0。 float:float属于 浮点类型,在存储的时候,用 4个字节来存储,范围为 32位IEEEE 754单精度范围,在变量初始化的时候,float的默认值为 0.0f或0.0F,在初始化的时候可以写 0.0。 double:double同样属于 浮点类型,在存储的时候,用 8个字节来存储,范围为 64位IEEE 754双精度范围,在变量初始化的时候,double的默认值为 0.0。 char:char属于 字符类型,在存储的时候用 2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是 Unicode的字符范围,在变量初始化的时候,char类型的默认值为 'u0000'。 boolean:boolean属于 布尔类型,在存储的时候不使用字节,仅仅使用 1位来存储,范围仅仅为 0和1,其字面量为 true和false,而boolean变量在初始化的时候变量的默认值为 false。 Java里面,每一种原始类型都对应着相应的包装类型,在JDK1.5之前(不包含JDK1.5),当包装类和原始类型进行相互转换的时候,需要调用包装类型的方法进行转换,不能通过操作符进行直接的计算。下边是一个原始类型和包装类型的一个对应表:原始类型 | 对应的包装类型 | 默认值 | 存储格式 | 数据范围 |
short | java.lang.Short | 0 | 2个字节 | -32,768到32767 |
int | java.lang.Integer | 0 | 4个字节 | -2,147,483,648到2,147,483,647 |
byte | java.lang.Byte | 0 | 1个字节 | -128到127 |
char | java.lang.Character | /u0000 | 2个字节 | Unicode的字符范围 |
long | java.lang.Long | 0L或0l | 8个字节 | -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 |
float | java.lang.Float | 0.0F或0.0f | 4个字节 | 32位IEEEE 754单精度范围 |
double | java.lang.Double | 0.0或0.0D(d) | 8个字节 | 64位IEEE 754双精度范围 |
boolean | java.lang.Boolean | false | 1位 | true(1)或false(0) |
自动转换:
条件:
A.这两种类型是兼容的;
B.目的类型数的范围(位数)比来源类型的大
当以上2个条件都满足的时候,
拓宽转换(widening conversion)就会自动发生,例如,int类型范围比所有byte类型的合法范围大,因此不要求显示的强制转换语句。对于拓宽转换,兼容程度可以看下边的继承树:
java.lang.
Object
|—java.lang.
Boolean
|—java.lang.
Character
|—java.lang.
Number
|—java.lang.
Byte
|—java.lang.
Float
|—java.lang.
Integer
|—java.lang.
Long
|—java.lang.
Short
|—java.lang.
Double
从上边的继承树可以可以看到,
Boolean类型、Character类型、Number类型是两两
不兼容的,所以在隐式转换的过程,不兼容的类型是不能进行自动类型转换的
强制转换:
尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。如果2种类型是兼容的,那么Java 将自动地进行转换。例如,把int 类型的值赋给long 类型的变量,总是可行的。然而,不是所有的类型都是兼容的,因此,不是所有的类型转换都是可以隐式实现的。例如,没有将double 型转换为byte 型的定义。幸好,获得不兼容的类型之间的转换仍然是可能的。要达到这个目的,你必须使用一个强制类型转换,它能完成两个不兼容的类型之间的显式变换。它的通用格式如下:
(target-type)value
Java的基本类型里面有几点需要说明:
[1]char类型是无符号16位整数,子面值必须用单引号括起来,如:'a'
[2]String在Java里面是类,直接父类是java.lang.
Object,所以String不属于Java里面的原始类型
[3]长整数字有一个后缀为“L”或者“l”,八进制数字前缀为“0”,十六进制的前缀为“0x”
[4]默认的基本浮点类型为double
[5]float数据类型有一个后缀为“F”或“f”,Double数据类型后边可以跟“D”或者“d”,也可以不跟
[6]char类型可以使用通用的转义字符,但是不是ASCII码,应该是Unicode格式的如'/u0000'