红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【CS61B】Lec3-Java Basic2

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));
    }
}