
目录
一、整型
二、浮点类型
三、char类型
四、boolean类型
五、编码表
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。
Java是一种强类型语言。必须为每一个变量声明一种类型。在Java中一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
一、整型整型用于表示没有小数部分的数值,它允许是负数。
类型
存储需求
取值范围
int [整型]
4字节
-2 147 483 648 ~ 2 147 483 647(正好超过20亿)
-231 ~ 231-1
short [短整型]
2字节
-32 768 ~ 32 767
-215 ~ 215-1
long [长整型]
8字节
-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
-263 ~ 263-1
byte [字节]
1字节
-128 ~ 127
Java各整数类型有固定的范围和字段长度,不受具体OS[ *** 作系统]的影晌,以保证java程序的可移植性。
Java的整型常量(具体值)默认为int型,声明long型常量须后加 L 或 l (如400000000000L)。
int 类型最常用,long用于表示大数字。
byte 和 short 类型主要用于特定的应用场合。
- bit:计算机中的最小存储单位。
- byte:计算机中基本存储单元。
1 byte = 8 bit
- 十六进制数值前缀:0X或0x(如0xCAFE)。
- 八进制数值前缀:0(如010)。
- 二进制数值前缀:0B或0b(如0b1001)。
从Java 7开始,加上前缀 0b 或 0B 就可以写二进制数。可以为数字字面量加下划线(如1_000_000)。
public class IntDetail{
public static void main(String[] args) {
// Java的整型常量(具体值)默认为int型,声明long型常量须后加L或l
int n1 = 1; // int类型 4字节
//int n2 = 2L; // 2L是long类型,直接赋值给int类型会报错
long n3 = 3L; // 这样不会报错
}
}
二、浮点类型
浮点类型用于表示有小数部分的数值。浮点数=符号位+指数位+尾数位
尾数部分可能丢失,造成精度损失(小数都是近似值)。
类型
存储需求
取值范围
float [单精度]
4字节
大约±3.402 823 47E+38F(有效位数为6 ~ 7位)
double [双精度]
8字节
大约±1.797 693 134 862 315 70E+308(有效位数为15位)
与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受具体OS的 影晌。
Java的浮点型常量(具体值)默认为double型,声明float型变量须后加 f 或 F(如3.14F),也可以在浮点数值后加面添加后缀D或d来表示double类型(如3.14D)
浮点型常量有两种表示形式:
- 十进制数形式:如:5.12、512.0f、.512 (必须有小数点)
- 科学计数法形式:如:5.12e2[5.12*10的2次方]、5.12E-2 [5.12/10的2次方]
通常情况下,应该使用double型,因为它比float型更精确。
对运算结果是小数的进行相等判断时,应该是以两个数的差值的绝对值,在某个精度范围类判断
public class FloatDetail{
public static void main(String[] args) {
// Java的浮点型常量(具体值)默认为double型,声明float型变量须后加 f 或 F
//float num1 = 1.1; // 会报错,float类型需要加上f或者F
float num2 = 1.1f;
double num3 = 1.1;
double num4 = 1.1F;
// 十进制数形式:如:5.12、512.0f、.512 (必须有小数点)
double num5 = .512; // 等价于0.512
System.out.println(num5);
// 科学计数法形式:如:5.12e2[5.12*10的2次方]、5.12E-2 [5.12/10的2次方]
double num6 = 5.12e2;
double num7 = 5.12e-2;
System.out.println(num6);
System.out.println(num7);
// 通常情况下,应该使用double型,因为它比float型更精确。
double num8 = 2.1234567851;
float num9 = 2.1234567851F;
System.out.println(num8);
System.out.println(num9);
// 浮点数精度问题
double num10 = 2.7; // 结果:2.7
double num11 = 8.1 / 3; // 结果:2.6999999999999997
System.out.println(num10);
System.out.println(num11);
if(num10 == num11) {
// 不会进入该条件判断,因为num10和num11不相等
System.out.println("相等");
}
// 正确的写法 如果差值小于0.0001,则认为相等
if (Math.abs(num11 - num10) < 0.0001) {
System.out.println("认为相等");
}
}
}
可以使用十六进制数表示浮点数值(如0.125=2-3,可表示成0x1.0p-3),在十六进制表示法中,尾数采用十六进制,p表示指数,指数采用十进制,指数的基数是2
用于表示溢出和出错情况的三个特殊的浮点数值:
- 正无穷大(Double.POSITIVE_INFINITY)
- 负无穷大(Double.NEGATIVE_INFINITY)
- NaN(不是一个数字,Double.NaN)
这三个特殊的值,可以以相应的Float类型的常量表示,在实际应用中很少遇到。
检测一个特定的值是否等于Double.NaN:
if(Double.isNaN(x))
三、char类型char类型用于表示单个字符,也可以用于表示Unicode字符,是两个字节(可以存放汉字)。
char类型的字面量值要用单引号括起来。
char类型的值可以表示为十六进制值,其范围从u0000到Uffff。
在Java中char的本质是一个整数,在输出时,是Unicode码对应的字符。是可以进行运算的。
字符型存储到计算机中,需要将字符对应的码值(整数)找到,比如 'a':
- 存储:'a' → 码值97 → 二进制(110 0001) → 存储
- 读取:二进制(110 0001) → 97 → 'a' → 显示
public class Char01{
public static void main(String[] args) {
char c1 = 'a';
char c2 = 't';
char c3 = '韩';
char c4 = 97;
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println("------------------------");
char c5 = 38889;
System.out.println(c5);
char c6 = 'a';
System.out.println((int)c6);
// 在 char类型 和 int类型 计算的过程中,
// char类型 的字符先查询编码表,得到97,再和10求和,结果为107。
// char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
System.out.println(c6 + 10);
}
}
四、boolean类型
boolean(布尔)类型有两个值:false 和 true,用来判定逻辑条件,没有null值。占1个字节。整型值和布尔值之间不能进行相互转换。
public class Boolean01{
public static void main(String[] args) {
boolean isPass = true;
if (isPass == true) {
System.out.println("成绩合格");
} else {
System.out.println("成绩不合格,下次努力");
}
}
}
五、编码表
就是将文字和一个十进制数进行对应起来组成一张表格。
在计算机的内部都是二进制的0、1数据,编码表可以让计算机直接识别文字。将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。
字符码表:
- ASCII编码表:1个字节,一共128个字符,实际上一个字节可以表示256个字符,只用128个
-
- 缺点:不能表示所有字符
- Unicode编码表:固定大小的编码使用两个字节来表示字符,字母和汉字统一都是占用两个字节,最大表示2的16次方(65536)个字符,编码0-127是和ASCII编码表相同,因此兼容ASCII编码表
-
- 缺点:浪费空间
- utf-8编码表:大小可变的编码表,可以使用1-6个字节表示一个符号,根据不同的符号而变化字节的长度,字母使用1个字节,汉字使用3个字节
- gbk:可以表示汉字,而且范围广,字母使用1个字节,汉字2个字节
- gb2312:可以表示汉字,gb2312 < gbk
- big5码:繁体中文,台湾,香港
特殊字符的转义序列:
转义序列
名称
Unicode值
b
退格
u0008
t
制表
u0009
n
换行
u000a
r
回车
u000d
”
双引号
u0022
’
单引号
u0027
反斜杠
u005c
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)