CodeGym /课程 /JAVA 25 SELF /Java 中的数字与字符

Java 中的数字与字符

JAVA 25 SELF
第 6 级 , 课程 1
可用

1. 有哪些数值类型?

在编程中我们经常与数字打交道——从用户的年龄到银河中的恒星数量,或者银行账户中的分角。但 不同的任务需要不同的数值类型:有时只需保存整数,有时需要非常精确的小数,有时则需要“非负”数字。

整数(int 等)

整数 是没有小数部分的数。
在 Java 中最常用的是 int 类型,但除此之外还有几个按大小和范围不同的选项。

  • int —— 处理整数的主力类型。它能容纳很大(也很小)的值,同时占用的内存不多。 例如,统计点赞数、年龄、一年中的天数等几乎都会使用 int
  • long —— 当数值可能非常大时使用(例如数十亿或数万亿)。 示例:保存 YouTube 有史以来的总观看次数。
  • short —— 更省内存,但很少使用。适用于有大量相同小值的场景(例如音频数据、颜色分量)。
  • byte —— 适合更小的取值范围,常见于图形与文件处理等注重内存节省的场景。

小数(doublefloat

有时需要处理带小数部分的数。例如气温、学生的平均分、带分角的小数价格。

  • double —— 存储小数的“默认”类型。对大多数计算足够精确(例如:3.1415926535…)。
  • float —— 更轻量、精度更低的类型,常见于计算机图形或需要处理大型数组的数据场景,强调内存节省。

特殊数值类型

  • BigInteger —— 当需要处理超出标准范围的超大整数时使用,例如在密码学或天文计算中。
  • BigDecimal —— 用于进行精确小数计算(金融、利率计算),可避免 doublefloat 的精度问题。

2. 取值范围

整数类型 可以存储正数和负数。当取值可能“高于或低于 0”时这很方便:例如气温、账户余额、相对海平面的高度。

示例:

  • int : -10, 0, 50
  • long : 0, 10, -1000_000_000_000_000_000L

整数类型

类型 大小 取值范围 示例
byte
1 字节 -128 到 127 -128, 0, 127
short
2 字节 -32 768 到 32 767 -1000, 0, 32000
int
4 字节 -2 147 483 648 到 2 147 483 647 -1000000, 0, 2000000
long
8 字节 -9 223 372 036 854 775 808
到 9 223 372 036 854 775 807
-10_000_000_000, 1

浮点类型

类型 大小 示例值 说明
float
4 字节 3.14f, -0.001f 单精度(约 7 位数字)
double
8 字节 3.1415, -1.7E+308 双精度(约 15–16 位数字)

3. 数字字面量的后缀

在某些情况下需要显式指定数字要使用的类型。这可以通过添加后缀来完成:

  • Ll —— 表示 long 类型(例如:10000000000L
  • Ff —— 表示 float 类型(例如:3.14f
  • Dd —— 表示 double 类型(通常不需要,因为不带后缀的小数默认就是 double

如果不写后缀,整数默认为 int,小数默认为 double。例如,42int,而 3.14double

为什么需要后缀?例如,为了在把一个大数赋给 long 变量时避免出错:

long bigNumber = 9000000000L; // 如果去掉 L,将发生编译错误

使用下划线 _ 作为分隔符

当数字很长时,很容易在 0 的个数上看花。为便于阅读,Java 允许在数字字面量中使用下划线

int population = 146_700_000;
long stars = 100_000_000_000L;
使用下划线提升数字的可读性

这完全是合法的:编译器会忽略下划线,而你可以一眼看清分组。要点——不要把下划线放在开头、结尾、小数点之后或后缀之前。

4. 字符类型 char:它是什么,有什么用?

char 类型用于存储单个字符:字母、数字、标点、空格、特殊符号,甚至表情符号。

示例:

char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = '\u0416';
char euro = '€';
char smile = '☺'; // 是的,这样也可以!

重要规则:

  • char 的值写在单引号中:'A'、'7'、'#'。
  • 它必须是一个字符!如果写成 'AB' —— 编译器会报错。
  • 每个字符背后都有对应的数字编码(Unicode)。

Unicode:来自全世界的字符

Java 使用 Unicode 标准,这使它不仅能存储拉丁字母,还能处理西里尔字母、汉字、表情符号,甚至古埃及象形文字(如果你需要的话)。

有趣的事实:
char 本质上是一个 16 位的数字(从 065535),每个值都对应一个字符。

5. 字符与数字:通过 Unicode 的联系

由于每个字符在内部都是一个数字,我们可以在 charint 之间相互转换。

示例:获取字符的 Unicode 编码

public class CharToInt {
    public static void main(String[] args) {
        char ch = 'A';
        int code = ch; // char 到 int 的隐式转换

        System.out.println("字符 '" + ch + "' 的代码: " + code);
    }
}

结果:

字符 'A' 的代码: 65

现在反过来——通过编码得到字符:

public class IntToChar {
    public static void main(String[] args) {
        int code = 1040; // 字符 'A' 的 Unicode 编码(西里尔字母)
        char ch = (char) code; // 显式转换 int → char

        System.out.println("代码为 " + code + " 的字符: " + ch);
    }
}

结果:

代码为 1040 的字符: \u0410

6. Java 的基本原始类型

类型 大小(位) 取值范围 示例值 备注
byte
8 -128 ... 127 42 很少用
short
16 -32,768 ... 32,767 12345 用于节省内存
int
32 -2,147,483,648 ... 2,147,483,647 1000000 处理整数的主力类型
long
64 ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 5000000000L 用于非常大的整数
float
32 ~±3.4 × 10-38 ... ±3.4 × 1038 3.14f 浮点数,精度较低
double
64 ~±1.7 × 10-308 ... ±1.7 × 10308 2.718 浮点数,精度较高
char
16 0 ... 65 535 (Unicode) 'Ж', 'A', '?' 单个字符
boolean
1 true, false true 布尔值
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION