class Tank {
Integer level;
}
public class Assignment {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level=9;
t2.level=47;
System.out.println("t1 "+t1.level+"---t2"+t2.level);//9 47
t1=t2;
System.out.println("t1 "+t1.level+"---t2"+t2.level);//47 47
t1.level=27;
System.out.println("t1 "+t1.level+"---t2"+t2.level);//27 27
}
}
由于赋值操作的是一个对象的引用,所以修改T1的同时也修改了t2,因为T1和T2 包含同样的引用,指向相同的对象。(起初T1 的引用指向9的对象,对T1 赋值后,这个引用被覆盖,这个不被引用的对象就会被自动回收)
class Letter{
char c;
}
public class PassObject {
static void f(Letter y){
y.c = 'z';
}
public static void main(String args[]){
Letter x=new Letter();
x.c = 'a';
System.out.println(x.c);//a
f(x);
System.out.println(x.c);//z
}
}
五个不同的存储数据的地方:
- 寄存器:这是最快的存储区,因为他处于处理器内部,数量极其有限,所以急寄存器会根据需求进行分配,
- 堆栈:位于RAM(随机访问存储器)中,但是通过堆栈指针可以从处理器那里获取直接支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。java的对象引用就存于其中,但是java对象并不存于其中
- 堆:存放所有的java对象,堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。new 一个对象的时,会自动在堆里进行存储分配。
- 常量存储:常量值通常直接存放在程序代码 内部,他永远不会改变。存放在ROM(只读存储器)
JAVA中的数组
当创建一个数组的时候,实际上就是创建了一个数组引用,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。一旦java看到null,就知道这个引用还没有指向对象,在使用任何引用前,必须为其指定一个对象。
方法名和参数列表–唯一的标识一个方法
static关键字
当声明一个事物是static的时,就以为这个域或者方法不会与包含他的那个类的任何对象实例关联起来。所以,即使从未创建某个类的任何对象,也可以调用其static方法或者访问他的static域。