Java是一种强类型语言,每个变量都必须声明其类型。
Java的数据类型分为两大类:基本类型(primitive type)和引用类型(reference type)
Java中定义了3类8种基本数据类型,其中有4种整型,2种浮点型,1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。Java中没有无符号类型。
逻辑型:boolean
文本型:char
数值型:byte, short, int, long, float, double
注:引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!
整形
整型用于表示没有小数部分的数值,它允许是负数,Java提供了4种整型:
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -21474483648~21474483647(正好超过20亿) |
short | 4字节 | -32768~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 2字节 | -128~127 |
Java 语言整型常数的三种表示形式:
十进制整数,如:99, -500, 0。
八进制整数,要求以 0 开头,如:015。
十六进制数,要求 0x 或 0X 开头,如:0x15 。
Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,如:
浮点类型
浮点类型用于表示有小数部分的数值,Java中有两种浮点类型:
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | -3.4E38(-3.41038)~3.4E38(3.41038) |
double | 8字节 | -1.7E308(-1.710308)~1.7E308(1.710308) |
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。
Java 浮点类型常量有两种表示形式
十进制数形式,例如:3.14,314.0,0.314
科学记数法形式,例如:314e2,314E2,314E-2
Float类型的数值有一个后缀F/f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d, 以明确其为double类型:
浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
注:
主要理由:由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。
二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
最好完全避免使用浮点数比较:
浮点数使用总结:
- 默认是double
- 浮点数存在舍入误差,很多数字不能精确表示。主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这也是浮点数的名字由来。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。
- 避免比较中使用浮点数
大数值:
Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
数据的溢出
当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期运行的结果。
当一个数字已经是最大或最小值的时候,再进行增加或减少操作,就会产生数据的溢出。如果想避免数据的溢出或解决数据溢出的问题,可以采用扩大数据范围的方式完成。
char类型
char(字符)类型用于表示单个字符,通常用来表示字符常量。采用16 位的Unicode编码来表示,其范围从\u0000到\Uffff。有足够的空间保存非英文字符,在内存中占有2个字节。计算机处理字符类型时,是把这些字符当成不同的整数来看待,因此,严格来说,字符类型也算是整数类型的一种。
特殊字符的转义序列符
转义序列 | 名称 | Unicode | 转义序列 | 名称 | Unicode |
---|---|---|---|---|---|
\b | 退格 | \u0008 | \” | 双引号 | \u0022 |
\t | 制表 | \u0009 | \’ | 单引号 | \u0027 |
\n | 换行 | \u000a | \ | 反斜杠 | \u005c |
\r | 回车 | \u000d | \f | 换页 |
boolean类型
boolean (布尔) 类型的变量是用来判断逻辑条件。只有true(真)和false(假)两个值,也就是说,当将一个变量定义成布尔类型的时候,它的值只能是true或false,除此之外,没有其他的值可以赋值给这个变量。
基本数据类型的默认值
数据类型 | 默认值 |
---|---|
byte | (byte) 0 |
short | (short) 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | \u0000 (空) |
boolean | false |
数据类型的转换
Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可以分为“自动类型转换”和“强制类型转换”。
- 数据类型的自动转换:
a、 转换前的数据类型与转换后的类型兼容。
b、 转换后的数据类型的表示范围比转换前的类型大。
注:String 表示一个字符串,可以直接声明的方式完成定义。任何的数据类型的数据都可以向String转型。 数据类型的强制转换:
123float f = 30.3f ; // 浮点型int x = (int) f // 强制类型的转换System.out.println(“10/3 = ”+((float)10/3)); // 执行强制转换强制类型转换通过截断小数部分将浮点值转换为整数。如果想对浮点数进行舍入运算,以便得到最接近的整数,那就需要使用Math.round方法。round方法返回值为long类型。
12double x = 9.997 ;int nx = ( int ) Math.round( x ) ; // nx 的值为10