3.2.4 字节型变量
byte a=10;//由byte定义的字节型变量
byte型变量所能表示的范围:
public class Num_type { public static void main(String[] args) { System.out.println(Byte.MIN_VALUE); System.out.println(Byte.MAX_VALUE); } }
注:
- byte在任何系统下都占1个字节
- byte的范围是:-128 ~ 127
- 字节的包装类型为Byte
3.3 浮点型变量
浮点型变量,即小数型。
3.3.1 单精度浮点型
//定义方式: float a=1.0f; float b=2.0F;
例如:打印变量 a
float 类型在 Java 中占四个字节,同样遵守 IEEE 754 标准。
由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double,不太推荐使用float 。
float 的包装类型为 Float 。
float型变量所能表示的范围:
public class Num_type { public static void main(String[] args) { System.out.println(Float.MIN_VALUE); System.out.println(Float.MAX_VALUE); } }
1.4E-45=1.4x10^(-45)
3.3.2 双精度浮点型
//定义方式 double a=3.14;
double型变量所能表示的范围:
public class Num_type { public static void main(String[] args) { System.out.println(Double.MIN_VALUE); System.out.println(Double.MAX_VALUE); } }
大家看看这段代码的输出结果会是多少?
//代码1 public class Num_type { public static void main(String[] args) { int a=1; int b=2; System.out.println(a/b); } }
没错,答案是 0
在 Java 中,int 除以 int 的值仍然是 int (会直接舍弃小数部分)。
如果想得到 0.5,需要使用 float 或 double 类型计算:
也可以这样计算:
//代码2 public class Num_type { public static void main(String[] args) { double n=1.1; System.out.println(n*n); } }
你的结果是1.21吗?
这是因为小数并没有一个非常精确的数字,只能说是精确到小数点后几位。
注:
- double在任何系统下都占8个字节
- 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
- double的包装类型为Double
- double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值
3.4 字符型变量
public class Num_type { public static void main(String[] args) { char a = 'A';//char定义的字符型变量 char b = '1'; char c = '张';//java中的字符可以存放整形 System.out.println(a); System.out.println(b); System.out.println(c); } }
输出结果:
注:
- Java 中使用 单引号 + 单个字母 的形式表示字符字面值
- 计算机中的字符本质上是一个整数,在 C 语言中使用 ASCII 表示字符,而 Java 中使用 Unicode 表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文
- char的包装类型为Character
3.5 布尔型变量
布尔类型常用来表示真假,在现实生活中也是经常出现的。
public class Num_type { public static void main(String[] args) { boolean b = true;//boolean定义的布尔类型变量 System.out.println(b); b = false; } }
输出结果:
注:
- boolean 类型的变量只有两种取值,true 表示真, false 表示假
- Java 的 boolean 类型和 int 不能相互转换,不存在 1 表示 true,0 表示 false 这样的用法
- Java虚拟机规范中,并没有明确规定 boolean 占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节
- boolean的包装类型为Boolean
错误代码:
boolean a = true; System.out.println(a + 1);
第一个类型是 boolean 型,第二个是 int 型,两个并不能做运算。
3.6 类型转换
Java 作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有严格的校验。
观察下面代码:
int a=10; long b=100L; a=b;//编译失败 a 是整型,b 是长整型 b=a;//可以通过编译
运行结果:
这是因为 long 型的变量值范围对比 int 大,所以在由大到小转换的时候,可能会有损失。
而由小类型到大类型转换并没有影响。
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。