Java常量与运算符详解
立即解锁
发布时间: 2025-08-18 01:52:36 阅读量: 1 订阅数: 8 

# Java 常量与运算符详解
## 1. 常量概述
在 Java 编程里,我们常常会用到数值和字符串值,这些被称作常量。常量的数值是固定不变的。常量主要分为以下几类:
| 常量类型 | 示例 |
| ---- | ---- |
| 整数常量 | 8, -45, 2000000 |
| 浮点常量 | -34.6, .009, 8. |
| 字符串常量 | "Hi, Bob", "yo", "dog" |
浮点常量必须包含小数点,但小数点右侧的数字是可选的,例如 8. 和 8.0 表示同一个浮点常量。整数常量的默认类型是 `int`,浮点常量的默认类型是 `double`。
下面这段代码会产生编译错误:
```java
float gpa = 2.30;
float mpg;
mpg = 28.6;
```
这是因为 2.30 和 28.6 常量默认是 `double` 类型(占用 64 位),而 `gpa` 和 `mpg` 是 `float` 类型(占用 32 位),无法将 64 位的值存入 32 位的变量中,会产生“可能损失精度”的错误信息。
解决这类错误有两种办法:
1. 一直使用 `double` 变量而非 `float` 变量。
2. 通过添加 `f` 或 `F` 后缀,强制将浮点常量指定为 `float` 类型,示例如下:
```java
float gpa = 2.30f;
float mpg;
mpg = 28.6F;
```
## 2. 常量的分类
常量可分为硬编码常量和命名常量两类。
### 2.1 硬编码常量
硬编码常量是明确指定的值,也被叫做字面量。例如在下面的语句中,`299792458.0` 就是一个硬编码常量:
```java
propagationDelay = distance / 299792458.0;
```
此代码片段用于计算太空中消息的延迟,然而 `299792458.0` 这个值的含义并不直观,实际上它代表的是光速。
### 2.2 命名常量
命名常量是带有名称的常量。例如:
```java
final double SPEED_OF_LIGHT = 299792458.0; // 单位:米/秒
...
propagationDelay = distance / SPEED_OF_LIGHT;
```
命名常量本质上是变量,但使用 `final` 修饰符使其值固定。按照标准编码规范,命名常量的所有字符应大写,若为多单词命名常量,单词间用下划线分隔,如 `SPEED_OF_LIGHT`。
### 2.3 命名常量与硬编码常量的选择
并非所有常量都要设为命名常量。若初始化 `count` 变量为 0,使用硬编码的 0 即可:
```java
int count = 0;
```
若使用命名常量(如 `int count = COUNT_STARTING_VALUE`),并不会提升代码的清晰度。但像下面的代码:
```java
propagationDelay = distance / 299792458.0;
```
用 `SPEED_OF_LIGHT` 命名常量替换 `299792458.0` 能提高代码的清晰度。使用命名常量有两大好处:
1. 命名常量让代码更具自解释性,更易理解。
2. 若需更改命名常量的值,只需在方法顶部找到其初始化语句并修改初始化值,程序中所有使用该常量的地方都会自动更新,避免遗漏修改。
### 2.4 示例:温度转换器
以下是一个完整的程序示例,用于将华氏温度转换为摄氏温度:
```java
/***********************************************************************
* TemperatureConverter.java
* Dean & Dean
*
* 此程序将华氏温度转换为摄氏温度
***********************************************************************/
public class TemperatureConverter
{
public static void main(String[] args)
{
final double FREEZING_POINT = 32.0;
final double CONVERSION_FACTOR = 5.0 / 9.0;
double fahrenheit = 50; // 华氏温度
double celsius; // 摄氏温度
celsius = CONVERSION_FACTOR * (fahrenheit - FREEZING_POINT);
System.out.println(fahrenheit + " 华氏度 = " +
celsius + " 摄氏度。");
} // 结束 main 方法
} // 结束 TemperatureConverter 类
```
0
0
复制全文
相关推荐









