1.Java中等于号左侧叫句柄,等于号右侧叫值;句柄 = 值的地址(就是堆中的地址)
2.值传递(堆地址)和引用传递(传递栈的地址):
值传递:在方法被调用时,实参通过把他的内容副本传入方法内部,此时形参接收的内容是实参的一个拷贝,因此在方法内对实参的任何操作,都仅仅是对这个内容的副本进行操作,不影响原初始值的内容。值传递传递的是一个真实内容的副本,对副本的操作不影响原内容,也就是形参怎么变化,不影响实参对应的内容。
引用传递:"引用”也就是指向真实内容的地址值。在方法调用时,实参的地址通过方法调用被传递给相应的形参,在方法体内,形参和实参指向同一块内存地址,对形参的操作会影响原来的内容。
通俗点说:值传递传递的是值的地址(堆地址),引用传递传递的是栈地址;
Java中只有值传递,没有引用传递。
3.在方法内部声明的属性在new的时候都有默认值,而在方法外部声明的没有默认值;凡是在方法里面声明的变量,他的句柄都在栈中,在方法外部声明的变量,当new的时候都去了堆中。
4.对于基本数据类型,是在栈中开辟内存空间的,而引用数据类型不知道要开辟多大的内存空间,所以在堆中开辟内存空间。
5.当变量 = 字符串的时候,是需要在堆中新生成一个空间的。