java的引用
new 出来的叫对象。接收对象的叫引用 题主应该把这些基础的东西弄清楚。java里按值传递,就是说每次传递的是引用实际指向的堆中的对象。
■网友
指向对象的变量称为该对象的引用,其值为该对象的地址
■网友
第一个题主理解的没错,通过引用吧name从“张三”修改为“李四”。第二个的关键是,p2 new了一个新的对象“李四”时,原来“张三”的对象并不会被覆盖(“李四”是重新开辟的一段空间),也不会被回收(因为list2存放的引用指向着这个实际对象)。
■网友
题主应该理解下jmm模型,区别栈变量和堆变量的关系。所有的变量句柄都存在栈里面,他们指向同一块堆内存区,是一对多的关系,也就是所谓的引用,第一个例子没释放之前的引用,所以修改生效,第二个已经释放了并且指向另一块堆区域,所以不对之前的区域有影响
■网友
题主的源码基本等效于 图(注意 注释和没有注释 然后运行结果的区别)

【java的引用】
如果学过C语言,我们可以这样子来想19行的People p=new People, 就等于p申请一块内存,他有一个地址,随便认为他是Ox12312obj=p -\u0026gt; obj = Ox12312然后后面的22行的new People() 是从内存里又申请了一个内存,他有一个地址,随便认为他是Ox2512后面的obj = Ox2512;他们是不同的地址的而name属性是属于这个地址(People)的内容的一部分所以有不同的结果。就酱思路过程:我刚开始也和楼主的理解一样(顺便提醒一下楼主, 倒数第二行list2.add(p);应该是list2.add(p2);后来我看了一下ArrayList的add的源码public boolean add(E e) {\tensureCapacity(size + 1); // Increments modCount!!\telementData = https://www.zhihu.com/api/v4/questions/28832634/e;/treturn true; } elementData是private transient Object elementData;而其中的ensureCapcity的源码 public void ensureCapacity(int minCapacity) {\tmodCount++;\tint oldCapacity = elementData.length;\tif (minCapacity \u0026gt; oldCapacity) {\t Object oldData = https://www.zhihu.com/api/v4/questions/28832634/elementData;/t int newCapacity = (oldCapacity * 3)/2 + 1; /t if (newCapacity /u0026lt; minCapacity)/t/tnewCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity);/t} 再找到最关键的Arrays.copyOf的源代码 public static \u0026lt;T\u0026gt; T copyOf(T original, int newLength) { return (T) copyOf(original, newLength, original.getClass()); } public static \u0026lt;T,U\u0026gt; T copyOf(U original, int newLength, Class\u0026lt;? extends T\u0026gt; newType) { T copy = ((Object)newType == (Object)Object.class) ? (T) new Object : (T) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }System.arraycopy不知道是什么。。。但可大概猜测他的功能是返回了数组的赋值
推荐阅读
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- C语言 指针引用数组的地址问题
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 27岁,转行java的血与泪,该何去何从
- 怎样统计工程中未使用的java类
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 我想学java和安卓软件开发?
- 学计算机专业,java那些和网站开发选台式还是笔记本好
- JAVA设计思路
- 本人大专毕业一年,想要去培训,定了JAVAEE和安卓两个方向,应该学那个纠结,求帮助
