62,628
社区成员
发帖
与我相关
我的任务
分享首先我知道私有变量是什么,也基本理解,但是今天遇到了一个不理解的问题。
在一个Student类里,有一个private的age成员,和一个public的testFunc方法。其中testFunc方法需要传进一个对象oj。我发现在这个testFunc方法里居然可以修改oj的private属性,很不理解。这样就相当于通过a对象修改了b对象的私有属性,似乎有违private的初衷?
见代码:
Student.java
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void testFunc(Object oj){
var tmp = (Student) oj;
tmp.age = 100000;
}
}
StudentTest.java
public class StudentTest {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.setAge(10);
s2.setAge(10);
s1.testFunc(s2);
System.out.println("s2 age is:" + s2.getAge());
}
}
这种场景很多,比如equals方法通常会传oj,那如果修改了oj,岂不是很危险?该怎样理解呢?
这个测试的结果如下:
s2 age is:100000