跳转至

基本类型与变量

从最基础的开始。这一章你会建立 Java 的强类型心智——它和 JS 最大的体感差异。

Java 的 8 种基本类型

JS 只有 number(什么整数小数都塞进去)。Java 把数值拆得很细,每种占的内存不同:

类型 含义 范围 JS 对照
byte 8 位整数 -128 ~ 127
short 16 位整数 ±3.2 万
int 32 位整数(最常用) ±21 亿 number 的整数部分
long 64 位整数 极大 number
float 32 位浮点 number
double 64 位浮点(默认小数) number 的小数部分
char 单个字符 'A' 长度为 1 的 string
boolean 真 / 假 true / false boolean

前端人记忆法

平时写整数用 int,写大数用 long(字面量加 L10000000000L), 写小数用 double,判断真假用 boolean。这就够覆盖 90% 场景。

变量:类型必须写在前面

// JS:类型藏在值里
let count = 10;        // 不写类型
count = "十";          // 合法,类型变了
// Java:类型写在变量名前面
int count = 10;        // 必须写 int
count = "十";          // ✗ 编译报错!int 永远不能装字符串

类型一旦声明就锁死,编译器在编译期就检查——这正是 Java "啰嗦但安全"的根源。

引用类型:String

基本类型之外的值都是引用类型(对象),最常见的是 String

String name = "Tom";        // 双引号是字符串,单引号是 char
char first = 'T';           // 单引号只能放一个字符

一个可运行的完整示例

下面这段代码是仓库里真实可编译的文件 TypesDemo.java——文档直接引用它的内容, 改了代码这里自动同步:

package com.javaglm.language.ch04;

/**
 * 第 04 章 · 基本类型与变量 —— 可运行示例。
 *
 * <p>本文件被 docs/02-language/04-types-variables.md 通过 mkdocs snippet 直接引用:
 * 文档页面展示的内容 == 这里编译的那份,改一处自动同步、零漂移。
 *
 * <p>运行方式:{@code mvn exec:java}(本模块)或 IDEA 里点运行按钮。
 */
public class TypesDemo {

    public static void main(String[] args) {
        // 1. 基本类型:类型必须写在变量名前面(对比 JS 的 let count = 10)
        int count = 10;
        long bigNumber = 10000000000L;   // long 字面量要加后缀 L
        double price = 19.99;
        boolean isOpen = true;
        char first = 'T';                 // 单引号 = 单个字符;双引号才是字符串

        System.out.println("count      = " + count);
        System.out.println("bigNumber  = " + bigNumber);
        System.out.println("price      = " + price);
        System.out.println("isOpen     = " + isOpen);
        System.out.println("first      = " + first);

        // 2. 引用类型:String(双引号)
        String name = "Tom";
        System.out.println("name       = " + name);

        // 3. ★ 前端人最大的坑:字符串比较内容必须用 .equals(),绝不能用 ==
        String a = new String("hi");
        String b = new String("hi");
        System.out.println("a == b           ? " + (a == b));          // false(比较的是地址)
        System.out.println("a.equals(b)      ? " + a.equals(b));       // true (比较的是内容)

        // 4. 类型一旦声明就锁死:取消下面这行注释会导致编译报错(incompatible types)
        // count = "十";   // ✗ int 永远不能装字符串
    }
}

上面这段代码是怎么进来的

Markdown 里只写了一行 --8<-- "language/ch04-types/.../TypesDemo.java", mkdocs 渲染时把那个真实 .java 文件的内容原样嵌入。这就是"所见即所编译"。

想自己跑这段代码

cd code/language/ch04-types
mvn compile exec:java -Dexec.mainClass="com.javaglm.language.ch04.TypesDemo"

或在 IDEA 里打开 code/ 目录,找到 TypesDemo.java,点旁边的绿色运行按钮。


下一章(编写中):流程控制。先看 第二篇路线图