类作为参数传进函数 会改变成员变量吗
时间: 2023-11-11 14:05:01 浏览: 42
当将一个对象作为参数传递给函数时,函数中对该对象的操作可能会改变对象的成员变量。
在 Java 中,对象作为参数传递时,实际上是将对象的引用传递给了函数。函数中对该对象的操作会影响到被引用的对象本身,包括其成员变量。
如果在函数中修改了对象的成员变量,那么这些修改将会对原始对象产生影响。这是因为在函数中传递的是对象的引用,函数对引用所指向的对象进行修改,就相当于对原始对象进行修改。
然而,需要注意的是,在函数中重新给参数对象赋予一个新的对象时,不会对原始对象产生影响。这是因为此时改变了参数对象的引用,参数对象指向了一个新的对象,而原始对象的引用并未改变。
总结起来,当将一个对象作为参数传递给函数时,函数中对该对象的操作可能会改变对象的成员变量,但重新赋值参数对象不会改变原始对象。
示例代码如下:
```java
public class MyClass {
private int value;
public MyClass(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static void modifyObject(MyClass obj) {
obj.setValue(10);
}
public static void reassignObject(MyClass obj) {
obj = new MyClass(20);
}
public static void main(String[] args) {
MyClass obj = new MyClass(5);
// 修改对象成员变量
modifyObject(obj);
System.out.println(obj.getValue()); // 输出 10
// 重新赋值参数对象
reassignObject(obj);
System.out.println(obj.getValue()); // 输出 10,原始对象不受影响
}
}
```
在上述示例中,`modifyObject` 函数通过修改对象的成员变量来改变原始对象的状态,而 `reassignObject` 函数重新给参数对象赋值一个新的对象,但原始对象的引用并未改变,因此不会对原始对象产生影响。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)