Java Basic 2
声明变量的原理
- 计算机留出对应变量类型的内存空间
- Java创建一个内部表用来将变量名与各个位进行对应
- 首次声明时,Java不会在这些空间里写入任何东西,但你不可以使用一个未定义的变量,对变量赋值后,才会向里面填充内容
类的实例化
当实例化一个对象时
- Java对类中的每个实例变量分配空间并初始化值
- 构造函数用其他一些值填充这些空间
其中,new关键字的作用类似于寻找并返回新创建的对象的地址
引用类型
不属于Java的八种基本类型的类型统称为引用类型
当声明一个引用类型时:
- Java会分配64bits空间,无论是哪一种对象
- 这些空间会被设置为
- Null(二进制位全0)
- 该类特定实例的地址
参数传递
The Golden Rule of Equals:
给予变量a与b,a=b的意义为把b的bits值复制给a
参数传递的方式按照此规律:即按值传递(有时候值为地址),而不能使用引用(如C++中的&)
数组的比较
Java中,==运算符仅仅是比较两个数组的地址是否相同
如果需要比较内容是否已知,可以使用Arrays.equals(x,y);方法
实例:递归实现链表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package lec3;
// 无限长的整型链表
// 使用递归写
public class IntList {
public int first;
public IntList rest;
public IntList(int f, IntList r) {
first = f;
rest = r;
}
public int size() {
if (rest == null) {
return 1;
}
return 1 + rest.size();
}
public int get(int x) {
if (x == 0) return this.first;
return this.rest.get(x - 1);
}
public static void main(String[] args) {
IntList L = new IntList(15, null);
L = new IntList(10, L);
L = new IntList(5, L);
System.out.println(L.size());
System.out.println(L.get(2));
}
}