final修饰的变量可以被改变了?高手来看看
先看代码
class People {
int i;
People(int ii) {
i = ii;
System.out.println(i);
}
}
public class FinalTest {
private final int i = 1;
private final int j;
private final People p;
public FinalTest() {
j = 2; //问题在这,被final修饰的变量不是常量吗?不是不能改变吗?
p = new People(3);
System.out.println(j);
}
public FinalTest(int x) {
j = x;
p = new People(x);
System.out.println(j);
}
public static void main(String[] args) {
FinalTest ft = new FinalTest();
FinalTest ft1 = new FinalTest(4);
}
}
在这个代码中,不管是被final修饰的基本数据类型还是引用似乎都可以改变,高手来解释!
此程序可以编译通过,并能正确运行。
class People {
int i;
People(int ii) {
i = ii;
System.out.println(i);
}
}
public class FinalTest {
private final int i = 1;
private final int j;
private final People p;
public FinalTest() {
j = 2; //问题在这,被final修饰的变量不是常量吗?不是不能改变吗?
p = new People(3);
System.out.println(j);
}
public FinalTest(int x) {
j = x;
p = new People(x);
System.out.println(j);
}
public static void main(String[] args) {
FinalTest ft = new FinalTest();
FinalTest ft1 = new FinalTest(4);
}
}
在这个代码中,不管是被final修饰的基本数据类型还是引用似乎都可以改变,高手来解释!
此程序可以编译通过,并能正确运行。
...全文
相关推荐
Java基于final修饰数据过程解析
首先,我们来了解一下 final 修饰的数据的两种情况:一是永不改变的编译时常量,例如 `private final int valueOne = 9;`;二是在运行时(不是编译时)被初始化的值,且之后不希望它改变
java final变量详解
Java final 变量详解Java 中的 final 变量是指不能被改变的变量,它有三个方面的作用:修饰变量、修饰方法和修饰类。
Java软件开发实战 Java基础与案例开发详解 6-6 final修饰符 共7页.pdf
#### 2. final修饰变量- **定义与作用**:当`final`修饰一个变量时,意味着该变量的值一旦被初始化之后就无法改变。这种变量通常被称为常量。
JAVA代码查错手册-综合文档
**final对象与成员变量**:即使参数`o`被声明为`final`,你仍然可以在方法内修改它的成员变量,只要不改变`o`引用的对象。6.
corejava_面试题
使用final关键字修饰一个变量时,意味着这个变量一旦被赋值后,其值将无法被改变。如果修饰的是引用类型变量,则引用本身不能变,但引用的对象内容可以变化。10. "=="和equals方法的区别?"


Java SE
