b的引用,但是栈中已经有了一个字面值为3的地址,所以会出现a和b同时指向3的情况.
java把内存分为两部分,一部分栈内存,一部分是堆内存,在函数中定义的一些基本类型的变量和对象都是在栈内存中分配的,当在一段代码块定义一个变量时...而堆内存是用来存储new创建的对象和数组,其内存分配是由java虚拟机的自动垃圾回收器管理,在堆中产生了一个数组或对象之后,可以在栈中定义一个特殊的变量,让这个变量的值是数组或对象在堆内存的首地址,栈的这个变量变成了堆中的数组或对象的引用变量...arraylist,linkedlist,vector,stack,
java 参数传递是值传递还是引用传递,数组和String作为参数传递的区别:
总结一下几点:1:Java参数传递方式只有一种,就是按值传递...当dog对象作为参数传递时:f(dog)
public void f(Dog dog){};
会在栈中拷贝一份dog,二者指向的堆内存地址是一样的,当我们再f()方法中修改dog的属性变量值时,也就是修改上图的堆内存中...虽然这里是数组,其实跟对象是一样的,数组的元素可认为是对象的属性字段,类比下就行了。数组跟string类型经过f方法赋值后,数组的内容改变了,但是string的没有变。