文档章节

Java中集合list的add方法添加的不是值COPY而是地址

osDaniel
 osDaniel
发布于 2014/01/03 16:06
字数 256
阅读 280
收藏 0

测试代码如下:

package test;


import java.util.ArrayList;
import java.util.List;




class Point {
int x;
int y;

public Point(int x,int y)
{
this.x = x;
this.y = y;
}


public int getX() {
return x;
}


public void setX(int x) {
this.x = x;
}


public int getY() {
return y;
}


public void setY(int y) {
this.y = y;
}

}


public class TestListAdd {
public static void main(String[] args)
{
List<Point> storePointList = new ArrayList<Point>();
Point testPoint = new Point(3,4);
storePointList.add(testPoint);
System.out.println("x = " + storePointList.get(0).getX() + ", y = " + storePointList.get(0).getY());
testPoint.setX(8);
System.out.println("x = " + storePointList.get(0).getX() + ", y = " + storePointList.get(0).getY());
}
}


结果为:

x = 3, y = 4
x = 8, y = 4


也即:

在add进storePointList之后,修改原来的testPoint 中的值,仍将改变storePointList中对应元素的值,可以看出add中()的只是传地址。

在这一点上和一般的java方法传参是一致的。一般java传参传的同样是地址。

可以总结出一个规律:在java中凡是对对象(或者说对象名)进行的传参传的都是地址。这是在方法体内部通过传进来的参数更改其下的属性可行的。

© 著作权归作者所有

共有 人打赏支持
osDaniel
粉丝 6
博文 37
码字总数 17120
作品 0
广州
加载中

评论(2)

osDaniel
osDaniel

引用来自“纳兰清风”的评论

内置简单类型按值传递,string和其他认为定义类型按引用传递

79
纳兰清风
纳兰清风
内置简单类型按值传递,string和其他认为定义类型按引用传递
Hibernate之HQL总结

查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query = session.createQuery(hql); List<Users> users =...

Patata
2013/05/26
0
2
理解Java 泛型 : 和

在工作中使用<? extends T>是很常见的。那么在使用add方法的时候(List <? extends T>),是不是发现在编译的时候就会报错。为什么,这是我和同事同时发出的疑问。这看来还是我们对JAVA的泛...

jishuai
2017/11/06
0
0
Java集合之Vector详解

简介 Vector的内部实现类似于ArrayList,Vector也是基于一个容量能够动态增长的数组来实现的,该类是JDK1.0版本添加的类,它的很多实现方法都加入了同步语句,因此是线程安全的(但Vector其实...

欧阳海阳
06/12
0
0
set,list,map集合相关

一、集合类简介 数组是很常用的一种的数据结构,我们用它可以满足很多的功能,但是,有时我们会遇到如下这样的问题: 1、我们需要该容器的长度是不确定的。 2、我们需要它能自动排序。 3、我...

mrliuze
2015/08/05
0
0
JAVA 持有对象——容器初探

引言 如果一个程序只包含固定数量的且其生命周期都是已知对象,那么这是一个非常简单的程序——《think in java》 了解容器前,先提出一个问题,ArrayList和LinkedList谁的处理速度更快呢? ...

jiangmitiao
2015/08/01
0
2

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部