3.2 基本数据类型
序号 | 数据类型 | 大小/位 | 可表示的数据范围 |
---|---|---|---|
1 | long(长整数) | 64 | -9223372036854775808~9223372036854775807 |
2 | int(整数) | 32 | -2147483648~2147483647 |
3 | short(短整数) | 16 | -32768~32767 |
4 | byte(位) | 8 | -128~127 |
5 | char(字符) | 16 | 0~255 |
6 | float(单精度) | 32 | -3.4E38(-3.4*10的38次方)~3.4E38(3.4*10的38次方) |
7 | double(双精度) | 64 | -1.7E308(-1.7*10的308次方)~1.7E308(1.7*10的308次方) |
8 | boolean(布尔) | --- | true或false |
3.2.1 整数类型
整数类型分四种:byte、short、int、long
short sum; //声明sum为短整型
声明之后,Java会在可使用的内存空间中寻找一个占有两个字节的块供sum变量使用,同时范围只能在-32768~32767之间
在Java中对于一个整型变量,其默认类型是int,所以在声明常量时不要超过int的范围
package com; public class DataDemo01 { public static void main(String[] args) { int num=999999999999999; //定义整型变量,错误,超出长度范围 } }
D:\Users\贾威娜\IdeaProjects\Java\src\com\DataDemo01.java:5:17 java: 过大的整数: 999999999999999
3.2.2 数据的溢出
当数据大小超出范围,且程序中没有数值范围的检查时,利用类型转换(使用更大范围的数据类型)防止数据出现紊乱
package com; public class DataDemo01 { public static void main(String[] args) { int max=Integer.MAX_VALUE; //整型最大值 System.out.println("整型最大值"+max); //输出最大值 System.out.println("整型最大值+1"+(max+1)); //最大值加1 System.out.println("整型最大值+2"+(max+2)); //最大值加2 } }
整型最大值2147483647 整型最大值+1-2147483648 整型最大值+2-2147483647 Process finished with exit code 0
原范围为-2147483648~2147483647
最大值加一变为最小值,最大值加二变成次小值,这就是数据类型的溢出,类似计数器的内容到最大值会自动归零
为了避免int类型的溢出,可以在该表达式的任意常量后加上大写的L,或在变量前面加long,做强制类型转换。
package com; public class DataDemo03 { public static void main(String[] args) { int max=Integer.MAX_VALUE; //整型最大值 System.out.println("整型最大值"+max); //输出最大值 System.out.println("整型最大值+1"+(max+1)); //最大值加1 System.out.println("整型最大值+2"+(max+2L)); //变为long型 System.out.println("整型最大值+2"+((long)max+2));//转换为long型 } }
整型最大值2147483647 整型最大值+1-2147483648 整型最大值+22147483649 整型最大值+22147483649 Process finished with exit code 0
处理int类型的溢出,可以利用强制类型转换的方式。但是对于long类型的溢出,必须加上变量值的界限检查,才不会出错
Integer是包装类。对于Integer可以使用MAX_VALUE取得最大值,也可以通过MIN_VALUE取得最小值,Integer的最大作用在于字符串与整型的转换上,还具有自动拆箱和自动装箱的功能。
3.2.3 字符类型
字符类型在内存中占有两个字节,可以用来保存英文字母等字符。计算机处理字符类型时,是把字符当成整数来看。
Unicode为了避免跨平台时发生错误,为每一个字符制定了一个唯一的数值。Java用的就是Unicode字符码系统。
package com; public class DataDemo04 { public static void main(String[] args) { char ch1='a'; //定义字符 char ch2=97; //定义字符,整型转字符 System.out.println("ch1="+ch1); //打印输出 System.out.println("ch2="+ch2); //打印输出 } }
ch1=a ch2=a Process finished with exit code 0
给字符变量赋值可以使用数字和字符,都可以正确运行
转义字符:
常用的转义字符 序号 转义字符 描述 序号 转义字符 描述 1 \f 换页 5 \r 归位 2 \\ 反斜线 6 \"
双引号 3 \b 倒退一格 7 \t 制表符Tab 4 \' 单引号 8 \n 换行 package com; public class DataDemo04 { public static void main(String[] args) { char ch1='\"'; //定义转义字符 char ch2='\\'; //定义转义字符 System.out.println("ch1="+ch1); //打印输出 System.out.println("ch2="+ch2); //打印输出 System.out.println("\"Hello World\""); //直接输出转义字符 } }
ch1=" ch2=\ "Hello World" Process finished with exit code 0
3.2.4 浮点数类型与双精度浮点数类型
浮点数的表示方式除了指数的形式外,还可用带有小数点的一般形式来表示
double num; //声明num为双精度浮点型变量 float sum=3.0f; //声明sum为浮点型变量,其初值为3.0
声明之后,Java会在可使用的内存空间中开辟一个内存块供num变量使用,其范围在-1.7E308~1.7E308之间,之后再开辟另外一个内存块供sum使用,范围只能在-3.4E38~3.4E38之间。
double num1=-6.3e64; //声明num1为double double num2=-5.34E16; //e也可以用大写E float num3=7.32f; //声明num3为float,并设初值为7.32f float num4=2.456E67; //错误,超出float可表示范围
注意:使用浮点型数值时,默认的类型是double。在数值后面可加上D或是d,作为double类型的标识,此时D或d是可有可无的。在数据后面加上F或f,则作为float类型的识别,此时若没有加上则默认double类型,而在编译时会发生错误,错误提示可能会丢失精度。
package com; public class DataDemo06 { public static void main(String[] args) { float num=3.0f; System.out.println("两个小数相乘:"+num*num); } }
两个小数相乘:9.0 Process finished with exit code 0
3.2.5 布尔类型
可选true和false
boolean flag=true; //声明布尔变量flag,并赋值为true
可直接Sout输出
3.2.6 基本数据类型的默认值
序号 | 数据类型 | 默认值 |
1 | byte | (byte)0 |
2 | short | (short)0 |
3 | int | 0 |
4 | long | 0L |
5 | float | 0.0f |
6 | double | 0.0d |
7 | char | \u0000(空,”) |
8 | boolean | false |
默认赋值没有意义,但应该保证程序执行时不会有这种未定义值的变量存在。虽然便利,但过于依赖系统给变量赋值,不容易检测到是否已经给予变量应有的值。