Java基础知识总结(一):数据类型、数据溢出与进制转换
Java基础知识总结(一):数据类型、数据溢出与进制转换
本文系统梳理 Java 基础数据类型、字符常量、浮点数精度、数据溢出以及常见进制转换知识点。这些内容既是 Java 入门基础,也是面试中的高频考点。
目录
- Java数据类型
- 字符常量与转义字符
- 整数除法与浮点除法
- float与double区别
- 数据溢出问题
- byte超范围现象
- 进制基础知识
- 十进制转二进制
- 二进制转十进制
- 二进制转八进制
- 二进制转十六进制
- 常见面试题
- 总结
一、Java数据类型
Java 是一种强类型语言,每个变量都必须声明数据类型。
Java 数据类型分为两大类:
1. 基本数据类型(Primitive Type)
| 类型 | 大小 | 默认值 | 说明 |
|---|---|---|---|
| byte | 1字节 | 0 | 整数 |
| short | 2字节 | 0 | 整数 |
| int | 4字节 | 0 | 最常用整数类型 |
| long | 8字节 | 0L | 长整数 |
| float | 4字节 | 0.0F | 单精度浮点数 |
| double | 8字节 | 0.0D | 双精度浮点数 |
| char | 2字节 | ‘\u0000’ | 字符 |
| boolean | 不固定 | false | 布尔值 |
示例:
int age = 18;
double salary = 15000.5;
char gender = '男';
boolean flag = true;
2. 引用数据类型(Reference Type)
引用类型保存的是对象的地址。
常见引用类型:
- 类(Class)
- 数组(Array)
- 接口(Interface)
- 枚举(Enum)
- 注解(Annotation)
例如:
String name = "Tom";
int[] nums = {1, 2, 3};
其中:
String
本质上也是一个类。
二、字符常量
字符常量必须使用单引号包裹。
正确示例:
char c1 = 'A';
char c2 = '1';
char c3 = '中';
错误示例:
char c = 'AB';
编译报错:
Too many characters in character literal
原因:
字符常量中必须且只能存在一个字符。
三、转义字符
Java中某些字符具有特殊含义,需要使用转义字符表示。
常见转义字符:
| 转义字符 | 含义 |
|---|---|
| \n | 换行 |
| \t | Tab制表符 |
| \r | 回车 |
| \ | 反斜杠 |
| ’ | 单引号 |
| " | 双引号 |
示例:
System.out.println("Hello\nJava");
输出:
Hello
Java
示例:
System.out.println("姓名\t年龄");
输出:
姓名 年龄
四、整数除法与浮点除法
这是很多初学者容易忽略的问题。
1. 两边都是整数
System.out.println(5 / 2);
结果:
2
原因:
整数运算会直接舍弃小数部分。
计算过程:
5 ÷ 2 = 2.5
舍弃小数部分
结果为2
2. 有一个浮点数参与运算
System.out.println(5.0 / 2);
结果:
2.5
再例如:
System.out.println(5 / 2.0);
结果:
2.5
结论:
只要参与运算的数据中有一个是浮点数,最终结果就是浮点数。
五、float与double区别
浮点数用于表示小数。
Java中有两种浮点类型:
float
double
1. float
定义:
float price = 19.9f;
注意:
f
不能省略。
否则:
float price = 19.9;
会报错。
特点:
- 4字节
- 32位
- 精度约7位有效数字
例如:
float f = 1234567.123f;
能够较准确保存。
但是:
float f = 12345678.123f;
会出现精度损失。
2. double
定义:
double price = 19.9;
特点:
- 8字节
- 64位
- 精度约16位有效数字
例如:
double d = 1234567890123456.0;
依然可以保持较高精度。
3. 为什么推荐使用double?
大多数情况下:
double
既拥有更高精度,
又不会造成明显性能问题。
因此Java默认小数类型就是:
double
六、数据溢出问题
数据类型都有自己的取值范围。
以 byte 为例:
-128 ~ 127
如果超过范围就会发生溢出。
示例:
byte b = 127;
b++;
输出:
-128
很多人第一次看到都会觉得奇怪。
实际上:
127 + 1
超出byte最大值
从最小值重新开始
因此变成:
-128
七、byte超范围现象
示例:
byte b = (byte)128;
System.out.println(b);
输出:
-128
为什么?
128的二进制表示:
10000000
byte只有8位。
Java会保留低8位:
10000000
最高位为符号位。
因此表示:
-128
再看一个例子:
byte b = (byte)130;
System.out.println(b);
输出:
-126
原因同样是高位被截断,只保留低8位。
八、进制基础知识
开发中常见进制:
| 进制 | 基数 |
|---|---|
| 二进制 | 2 |
| 八进制 | 8 |
| 十进制 | 10 |
| 十六进制 | 16 |
十六进制使用:
0~9
A~F
表示:
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
九、十进制转二进制
采用:
除2取余法
例如:
13
计算:
13 ÷ 2 = 6 余1
6 ÷ 2 = 3 余0
3 ÷ 2 = 1 余1
1 ÷ 2 = 0 余1
从下往上读:
1101
因此:
13 = 1101(二进制)
再例如:
20
计算:
20 ÷ 2 = 10 余0
10 ÷ 2 = 5 余0
5 ÷ 2 = 2 余1
2 ÷ 2 = 1 余0
1 ÷ 2 = 0 余1
结果:
10100
十、二进制转十进制
规则:
每一位乘以对应的2的幂次方。
例如:
1101
计算:
1 × 2³
+
1 × 2²
+
0 × 2¹
+
1 × 2⁰
即:
8 + 4 + 0 + 1
结果:
13
再例如:
10110
计算:
1×16
+
0×8
+
1×4
+
1×2
+
0×1
结果:
22
十一、二进制转八进制
规则:
每3位一组
不足3位前面补0。
示例:
110101
分组:
110 101
计算:
110 = 6
101 = 5
结果:
65
即:
110101(二进制)
=
65(八进制)
十二、二进制转十六进制
规则:
每4位一组
不足4位前补0。
示例:
11010111
分组:
1101 0111
计算:
1101 = D
0111 = 7
结果:
D7
再例如:
11111111
分组:
1111 1111
结果:
FF
十三、常见面试题
面试题1
System.out.println(5 / 2);
输出什么?
答案:
2
面试题2
System.out.println(5.0 / 2);
输出什么?
答案:
2.5
面试题3
byte b = 127;
b++;
输出什么?
答案:
-128
面试题4
float和double区别?
答案:
| 类型 | 字节数 | 精度 |
|---|---|---|
| float | 4字节 | 约7位有效数字 |
| double | 8字节 | 约16位有效数字 |
面试题5
为什么float赋值需要加f?
例如:
float f = 3.14f;
原因:
Java默认小数是double类型。
如果不加f:
float f = 3.14;
会发生类型不兼容。
总结
本文介绍了:
- Java基本数据类型
- 引用数据类型
- 字符常量
- 转义字符
- 整数除法与浮点除法
- float与double区别
- 数据溢出问题
- byte超范围现象
- 常见进制转换方法
这些知识虽然基础,却是Java学习和面试中的高频考点。建议结合代码进行验证,加深理解。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)