关于对象与内存的猜想

引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。
在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。

在传参中,引用类型对象的值的一个副本传入方法,原对象没改变,传入的副本重新赋值。

public class Test8 {


public void cc(String str){
System.out.println(3+str);
str = "no";
System.out.println(4+str);
}

public static void main(String[] args) {
String s = new String("aaa");
Test8 t = new Test8();
System.out.println(1+s);
t.cc(s);
System.out.println(2+s);
}

}

---------------------------------------

1aaa
3aaa
4no
2aaa

引用类型改变的是其内的属性值,其本身不变。

***********************************************************************

Map<String, Object> map = null;

List<BaseBean> beanlist = new ArrayList<BaseBean>();

for(int i=0;i<list.size();i++){
map = list.get(i);
basebean = new BaseBean();
basebean.setOrder_seq(map.get("ZBORDERID")+"");
basebean.setSequen((map.get("TEAMORDERID")+""));
basebean.setPassName((map.get("PASSNAME")+""));
basebean.setCardNO((map.get("DOCNUMBER")+""));
beanlist.add(basebean);
}

arraylist.add(basebean) 增加的是basebean对象的内存地址,如果for循环中,每次不重新产生新对象【basebean = new BaseBean();】,那么每次添加的都是同一个basebean对象,arraylist会以最后一次的内存地址为准!结果如下:

BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]
BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]
BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]
BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]
BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]
BaseBean [sequen=325690, order_seq=392240, passName=ODS/Thor, cardNO=G666666]

原文地址:https://www.cnblogs.com/flord/p/5718903.html