1、数据类型
在Java中支持的数据类型分为两种:基本数据类型与引用数据类型;基本数据类型总共有八种:布尔型boolean,数值类型中整数类型为:byte,short,int,long,char(相当于无符号整数类型),浮点类型为:float,double;引用数据类型包括类、接口和数组,还有一种特殊的null类型。
2、基本数据类型
基本数据类型有八种:
2.1、整型
- byte:一个byte类型整数在内存里占8位,表数范围是:-128~127
- short:一个short类型整数在内存里占16位
- int : 一个int类型正数在内存里占32位
- long:一个long类型整数在内存里占64位
int 是最常用的数据类型,因此在通常情况下,给定的一个整数值默认为int类型的。
如果把一个较小的数值赋给byte或者short变量,系统会自动把这个整数值当成byte或者short类型处理;如果使用一个巨大的整数值(超过int范围),java不会把数值当成long类型处理,若想将该数当成long类型处理的话,必须在后面加上“l”或“L”后缀;
//下面代码正确
byte a=56;
//错误;999999999999999999999(超过了int范围)默认为int类型
long b=999999999999999999999;
//正确
long b=999999999999999999999L;
//正确(自动类型转换)
long b=999;
2.2、字符型
- 字符型通常用于表示单个字符;字符型值必须使用单引号(‘’)括起来;
- 字符型在内存中占用“2字节”,
- char类型的变量,值完全可以参与加、减、乘、除等数学运算,也可以比较大小,对应的Unicode编码
- 一个汉字占两个字节
- 字符型常量的三种表现形式:
1)、字符常量是用单引号( ‘’ )括起来的单个字符,涵盖世界上所有书面语的字符。例如:
char c1 = ‘a’;
char c2 = ‘中’;
char c3 = ‘9’;
2)、Java 中还允许使用转义字符 ‘’ 来将其后的字符转变为特殊字符型常量。
例如:char c3 = ‘\n’; \n 表示换行符
3)直接使用 Unicode 值来表示字符型常量:’\uXXXX’。其中,XXXX 代表一个十六进制整数。 如:\u000a 表示 \n
2.3、浮点型
Java中浮点型分为两种float,double:
- float:单精度浮点数,占内存4字节,32位;
- double:双精度浮点型,占内存8字节,64位;
Java语言中默认的浮点类型位double类型,声明 float 型常量,须加“f”或“F”后缀
浮点型常量有两种表示形式: - 十进制数形式,如:5.12 512.0f .512 (必须有小数点)
- 科学记数法形式:如:5.12e2 512E2 100E-2
注意:Java浮点数使用二进制数据的科学记数法来表示浮点数,因此不可能精确表示一个浮点数。
Java还提供了三个特殊的浮点数值:正无穷大,负无穷大,非数,用于表示溢出和出错
例如:一个正浮点数除以0,或一个整数除以0.0,得正无穷,负数也是如此,得负无穷,0.0除以0.0得非数。
代码如下:
System.out.println(2.30/0);//Infinity(正无穷)
System.out.println(2/0.0);//Infinity
System.out.println(2.3/0.0);//Infinity
System.out.println(-2.60/0);//-Infinity(负无穷)
System.out.println(-6/0.0);//-Infinity
System.out.println(-2.60/0.0);//-Infinity
System.out.println(0.0/0.0);//NaN(非数)
//所有得正无穷都相等,所有负无穷都相等,而NaN不与任何数相等,NaN与NaN都不想等
只有浮点数除以0,才可以得到正无穷大,或负无穷大。一个整数除以0,会抛出一个算数异常(除以0异常)
2.4、布尔型
在 Java 中,布尔类型用 boolean 来表示。在内存中分配8位,1字节。boolean 类型适于逻辑运算,一般用于程序流程控制。还可以用在三目运算符中。
布尔类型的值只能是true/false,不能用0或非0代表。其他基本数据类型也不能转换成boolean类型
3、基本数据类型的转换
不同基本数据类型之间需要进行转换,转换方式可分为两种:自动类型转换和强制类型转换
3.1 自动类型转换
- 当一个表数范围小的数值或变量赋值给一个表数大的变量是=时,系统就进行自动类型转换。表述小的可以向表数大的进行自动类型转换,如同:一杯水倒进一个桶里。
- 任何基本类型的值与字符串进行运算时,基本数据类型的值都会自动转型为字符串类型
System.out.println("hello"+3+4);//hello34
System.out.println(3+4+"hello");//7hello
byte,short,char 之间不会相互转换,他们三者在计算时首先转换为 int
3.2、强制类型转换
将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符(());强制类型转换就类似于把桶里面的水倒进一个杯子里面。所以可能造成精度降低或溢出。
注:boolean 类型不可以转换为其它的数据类型。
//错误,2默认为int类型
short s = 5;
s = s-2;
//错误,第二行4默认为int类型,不能转换为byte
byte b = 3;
b = b + 4;
b = (byte)(b+4);
//正确
byte b = 3;
b = (byte)(b+4);
//第三句错误,byte,short之间不能相互转换
byte b = 5;
short s = 3;
short t = s + b