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学习和面试中的高频考点。建议结合代码进行验证,加深理解。

更多推荐