我知道关键字 private 的想法是启用封装。然而,当我意识到我可以在使用 getter 检索数组后对其进行修改时,我感到很困惑,这让我感到惊讶。尽管我认为 java 将所有变量视为对象,但对于普通整数来说,这不起作用。
示例:
public class PrivContainer {
private int[] myIntArray;
private int myInt;
PrivContainer(){
myIntArray=new int[1];
myIntArray[0]=3;
myInt=22;
}
public int[] getIntArray(){
return myIntArray;
}
public int getInt(){
return myInt;
}
public void printInt(){
System.out.println(myIntArray[0]);
System.out.println(myInt);
}
}
public class Main {
public static void main(String[] args){
PrivContainer pc=new PrivContainer();
int[] r=pc.getIntArray();
int q=pc.getInt();
r[0]=5;
q=33;
pc.printInt();
}
}
printInt()
的输出是 5,22
这意味着 main 方法可以更改私有(private) array
的条目,但不能更改私有(private) int
的条目。
有人可以向我解释一下这个现象吗?
最佳答案
数组是一个可变对象。因此,如果您有对该数组的引用,则可以修改其内容。您不能对类的原始成员(例如 int
)和对不可变类实例的引用(例如 String
和 Integer
).
您的任务:
q=33;
类似于:
r = new int [5];
这两个赋值都会导致变量包含新值,但它们不会影响为这些变量分配原始值的 PrivContainer
实例的状态。
关于java - 欺骗Java中的private关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063297/