02. 赋值

Author Avatar
FengXueke 10月 18, 2022
post02

赋值

  • 赋值运算1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//: Assignment.java
// Assignment with objects is a bit tricky
package com.isflee.c03_1_assignment;

class Number { int i;
}
public class Assignment {
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i + ", n2.i: " + n2.i);
//对一个对象进行操作时,我们真正操作的是它的句柄。
//n1指向容纳了值 9 的一个对象。在赋值过程中,那个句柄实际已经丢失。
n1 = n2;
System.out.println("2: n1.i: " + n1.i + ", n2.i: " + n2.i);
//此时n1 和 n2 是同一个句柄, n1的改变相当于n2也改变了
n1.i = 27;
System.out.println("3: n1.i: " + n1.i + ", n2.i: " + n2.i); }
} ///:~
1
2
3
4
输出结果
1: n1.i: 9, n2.i: 47
2: n1.i: 47, n2.i: 47
3: n1.i: 27, n2.i: 27
  • 赋值运算2 - 方法调用中的别名处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//: PassObject.java
// Passing objects to methods can be a bit tricky
package com.isflee.c03_1_2_pass_object;

class Letter {
char c;
}
public class PassObject {

//方法调用中的别名处理
//12章有特别说明
static void f(Letter y){
y.c = 'z';
}
public static void main(String[] args) {
Letter x = new Letter();
x.c = 'a';
System.out.println("1: x.c: " + x.c);
f(x);
System.out.println("2: x.c: " + x.c); }
} ///:~

f(Letter y) 中的 Letter y 传递的是一个句柄

1
2
3
输出结果
1: x.c: a
2: x.c: z