Java 变量

更新于 2025-12-25

Jakob Jenkov 发布于 2018-10-03

Java 变量是一块可以包含数据值的内存。因此,变量具有一个数据类型。数据类型在 Java 数据类型 一文中会有更详细的介绍。

变量通常用于存储 Java 程序执行任务所需的信息。这些信息可以是任意类型,例如文本、代码(如国家代码、货币代码等)、数字,以及多步计算的临时结果等。

以下代码示例中,main() 方法声明了一个名为 number 的整型变量。该整型变量的值首先被设置为 10,之后又加上了 20。

public class MyClass {
    public static void main(String[] args) {
        int number = 10;
        number = number + 20;
    }
}

Java 变量类型

在 Java 中,有四种类型的变量:

  • 非静态字段(Non-static fields)
  • 静态字段(Static fields)
  • 局部变量(Local variables)
  • 参数(Parameters)

非静态字段 是属于对象的变量。对象通过非静态字段保存其内部状态。非静态字段也被称为 实例变量,因为它们属于类的实例(即对象)。非静态字段在 Java 字段 一文中有更详细的说明。

静态字段 是属于类的变量。所有访问它的对象都共享同一个值。静态字段也被称为 类变量。静态字段同样在 Java 字段 一文中有更详细的说明。

局部变量 是在方法内部声明的变量。局部变量只能在其声明的方法内部访问。局部变量在 Java 方法 一文中有更详细的说明。

参数 是在调用方法时传递给该方法的变量。参数也只能在其声明的方法内部访问,不过在方法被调用时会为其赋值。参数也在 Java 方法 一文中有更详细的说明。

Java 变量声明

变量的声明方式取决于其类型(非静态、静态、局部、参数)。但它们之间存在一些共通之处。

在 Java 中,变量的声明方式如下:

type name;

type 替换为变量的数据类型,将 name 替换为你希望变量拥有的名称。

下面是一个声明名为 myVariable、类型为 int 的变量的示例:

int myVariable;

以下是 Java 中所有基本数据类型变量的声明示例:

byte myByte;
short myShort;
char myChar;
int myInt;
long myLong;
float myFloat;
double myDouble;

以下是 Java 中对象类型变量的声明示例:

Byte myByte;
Short myShort;
Character myChar;
Integer myInt;
Long myLong;
Float myFloat;
Double myDouble;
String myString;

注意对象类型的首字母是大写的。

当一个变量指向一个对象时,该变量被称为对象的“引用”。关于基本类型变量值和对象引用之间的区别,将在后续文章中详细说明。

变量命名的规则和约定将在本文后面部分介绍。

Java 变量赋值

在 Java 中,为变量赋值遵循以下格式:

variableName = value;

以下是三个具体示例,分别为三种不同数据类型的变量赋值:

myByte = 127;
myFloat = 199.99;
myString = "This is a text";

第一行将字节值 127 赋给名为 myByte 的字节变量;第二行将浮点值 199.99 赋给名为 myFloat 的浮点变量;第三行将字符串值(文本)"This is a text" 赋给名为 myString 的字符串变量。

你也可以在声明变量的同时为其赋值,如下所示:

byte myByte = 127;
float myFloat = 199.99;
String myString = "string value";

Java 变量读取

你可以通过在代码中任何可以使用变量或常量的地方写出变量名来读取 Java 变量的值。例如,在变量赋值的右侧、作为方法调用的参数,或在算术表达式中。例如:

float myFloat1 = 199.99;
float myFloat2 = myFloat1;              // 赋值语句右侧
float myFloat3 = myFloat2 + 123.45;     // 算术表达式的一部分
System.out.println(myFloat3);           // 方法调用的参数

Java 变量命名规则与约定

变量命名有一些规则和约定。

命名规则:

  • Java 变量名区分大小写。变量名 moneyMoneyMONEY 不同。
  • Java 变量名必须以字母、$_ 字符开头。
  • 在第一个字符之后,变量名还可以包含数字(以及字母、$_ 字符)。
  • 变量名不能与 Java 中的保留关键字相同。例如,intfor 是 Java 的保留关键字,因此你不能将变量命名为 intfor

以下是一些合法的 Java 变量名示例:

myvar
myVar
MYVAR
_myVar
$myVar
myVar1
myVar_1

命名约定(非强制,但推荐遵守):

  • 变量名通常使用小写字母。例如:variableapple
  • 如果变量名由多个单词组成,则从第二个单词开始,每个单词的首字母大写(驼峰命名法)。例如:variableNamebigApple
  • 尽管允许,但通常不建议变量名以 $_ 开头。
  • 静态 final 字段(即常量)全部使用大写字母,单词之间通常用 _ 分隔。例如:EXCHANGE_RATECOEFFICIENT

Java 局部变量类型推断(Local-Variable Type Inference)

从 Java 10 开始,Java 编译器可以根据变量声明时所赋的值自动推断局部变量的类型。此特性仅适用于局部变量、增强 for 循环中的索引变量,以及普通 for 循环中声明的局部变量。

为了说明 Java 局部变量类型推断的工作方式,先看一个 Java 10 之前的字符串变量声明示例:

String myVar = "A string!";

从 Java 10 起,如果变量的类型可以从赋值中推断出来,则在声明时不再需要显式指定类型。如下所示:

var myVar = "A string!";

注意这里使用了 var 关键字代替了具体的类型 String。编译器可以从赋值内容判断出变量应为 String 类型,因此无需显式写出。

以下是几个额外的 Java 局部变量类型推断示例:

var list = new ArrayList();
var myNum = new Integer(123);
var myClassObj = new MyClass();