java语言的数据类型分为两类:基本类型(Primitive Type)和引用类型(Reference Type)
基本类型(Primitive Type)
基本类型包括boolean类型和数值类型。其中数值类型有整数类型和浮点类型。
(1)boolean类型:boolean
boolean类型的数值只能是true或false,不能用0或非0来代表。其他基本数据类型的值也不能转换成boolean类型。例如:
//定义b1值为true
boolean b1 = true;
//定义b2值为false
boolean b2 = false;
字符串“true” 和“false” 不会自动转换成boolean类型,但如果使用一个boolean类型的值和字符串进行连接运算,则boolean类型的值会自动转换成字符串。例如:
//使用boolean类型的值和字符串进行连接运算,boolean类型的值会自动转换成字符串
String str = true +"";
//输出true
System.out.println(str);
(2)整数类型:byte 、short、int、long、char(char类型也称字符型,实际上是一种整数类型)
- byte:占8位 表数范围:-128(-2^7) ~ 127(2^7 - 1)
- short:占16位 表数范围:-32768(-2^15)~32767(2^15-1)
- int:占32位 表数范围:-2147483648(-2^31) ~ 2147483647(2^31-1)
- long:占64位 表数范围:-9223372036854775808(-2^63) ~ 9223372036854775807(2^63-1)
注意:如果直接将一个较小的整数常量(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数常量当成byte或short类型来处理。
如果使用一个巨大的整数常量(超出int类型的表数范围)时,java不会自动把这个整数常量当成long类型来处理。如果希望系统把一个整数常量当成long 类型来处理,应在这个整数常量后增加L作为后缀。例如:
//下面代码正确,系统会自动把56当成byte来处理
byte a =56;
/*
下面代码是错误的,系统不会把9999999999999当成long来处理,因为已经超出int类型的范围
*/
// long bigValue =9999999999999;
/*下面代码正确,在巨大整形常量后使用L后缀,强制使用long类型
*/
long bigValue2 = 9999999999222222L;
(3)字符型:char
字符型常量有3种表示形式:
- 直接通过单个字符来指定字符型常量,例如’A‘、’9‘和’0‘等。
- 通过转义字符表示特殊字符型常量,例如’\n‘、’\t‘等。
- 直接使用Unicode值来表示字符型常量,格式是‘\uxxxx’,其中xxxx代表一个十六进制的整数。范围是'\u0000' ~'\uFFFF'。一共可以表示65535个字符。
注意:char类型的值也可以直接作为整数类型的值来使用,但它是一个16位(占两个字节)无符号的整数,即全部为整数,表数范围是0 ~ 65535;
如果把 0 ~ 65535 范围内的一个int 整数赋给 char 类型变量,系统会自动把这个int 整数 当成 char 类型来处理。例如:
public calss CharTest
{
public static void main(String[] args)
{
//直接指定单个字符作为字符类型常量
char aChar = 'a';
//使用转义字符作为字符类型常量
char enterChar ='\r';
//使用Unicode编码值来指定字符型常量
char ch ='\u9999';
//输出字符‘香’
System.out.println(ch);
//定义一个‘林’字符型变量
char linChar = '林';
//直接将一个char类型常量当成int型变量 使用
int LinValue = linChar;
//输出为字符“林”所对应的在表数范围的数值:26519
System.out.println(LinValue);
//直接把0 ~65535范围的int整数赋给一个char类型变量
char c = 100;
//输出为d,即100对应的字符为'd'
System.out.println(c);
}
}
(4)浮点类型:float、double
double类型代表双精度浮点数,float类型代表单精度浮点数。一个double类型的数值占8个字节、64位,一个float类型的数值占4个字节、32位。
java语言的浮点类型默认是double类型,如果希望java把一个浮点类型值当成float类型处理,应该在这个浮点类型值后加上f或F后缀。
浮点数有两种表示形式:
- 十进制形式:这种形式就是简单的浮点数,例如5.12、512.0、.512。浮点数必须包含一个小数点,否则会被当成int类型处理。
- 科学计数法形式:例如 5.12e2(即5.12 x 10^2),5.12E2(也是5.12 x 10 ^2)。
- 注意:只要浮点类型才可以使用科学计数法形式表示。例如,51200是一个int类型的值,但512E2则是浮点类型的值。
3个特殊的浮点数值:正无穷大(POSITIVE_INFINITY)、负无穷大(NIGATIVE_INFINITY)和非数(NaN)。
注意:所有正无穷大数值都是相等的,所有负无穷大数值都是相等的;而NaN不与任何值相等,甚至和NaN都不相等。只有浮点数除以0才可以得到正无穷大或负无穷大,因为java语言会自动把和浮点数运算的0(整数)当成0.0(浮点数)来处理。如果一个整数除以0,则会抛出一个异常:ArithmeticException:/by zero(除以0异常)。
引用类型(Reference Type):
引用类型包括类、接口和数组类型,还有一种特殊的null类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。
实际上,引用类型变量就是一个指针,只是java语言里不再使用指针这个说法。
空类型(nulltype)就是null值的类型,这种类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型。空引用(null)是null类型变量的唯一的值。空引用(null)可以可以转换成任何引用类型。(注意:空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量。)