上述代码的p1的x值为什么没有变成10
时间: 2024-03-16 12:43:32 浏览: 38
在`change`方法中,有两个变量名为`x`的参数,一个是`int`类型的,一个是`Person`类型的。因为它们的变量名相同,所以在`change`方法中,`x`默认指代的是`int`类型的参数,而不是`Person`类型的`p.x`。
具体来说,当在`change`方法中执行`x = x`时,这个操作实际上是将`int`类型的参数`x`重新赋值为自身,不会对`Person`类型的`p1`对象的`x`值产生影响。因此,最终输出`p1.x`的值为20,而不是10。
如果要让`change`方法中的`x`指代`Person`类型的`p.x`,可以使用`this`关键字来显式地指明:
```
void change(int x, Person p) {
this.x = x; // 指代Person类型的x
p.x = x;
}
```
这样就可以将`Person`类型的`p1`对象的`x`值改为10了。
相关问题
已知定义一个person类class Person { int x; Person(int t){ x = t; } void change(int x, Person p) { x = x; p.x = x; } }运行Person p1 =new person(20); Person p2 =new person(30); p1.change(10,p2); System.out.println(p1.x); System.out.println(p2.x);
运行上述代码,输出结果为:
```
20
10
```
原因是:
首先创建了两个Person对象p1和p2,它们的x值分别为20和30。
然后调用了p1的change方法,传入参数10和p2。在change方法中,x值被重新赋值为传入的参数10,而p.x值被赋值为x,即10。
所以,p1的x值依然是20,而p2的x值变成了10。
因此,最终输出p1.x的值为20,p2.x的值为10。
有三个整数xyz,设置三个指针变量p1p2p3,分别指向xyz,然后通过指针变量使xyz三个变量交换顺序,即原来的xd
yz变成了zyx。以下是代码实现:
```
int x = 1, y = 2, z = 3;
int *p1 = &x, *p2 = &y, *p3 = &z;
int temp = *p1;
*p1 = *p3;
*p3 = *p2;
*p2 = temp;
```
经过上述代码的执行后,变量 `x` 的值为 3,变量 `y` 的值为 1,变量 `z` 的值为 2。注意,这里使用了指针变量 `p1`、`p2`、`p3` 来操作变量 `x`、`y`、`z`,从而实现了变量的交换。
阅读全文