看到标题也许感觉有点绕?先看看下面的问题!最近在做Android项目的时候,对一个集合对象的数据的分析怎么都不对,最后终于发现了问题,来记录一下,其实超级基础的东西,╮(╯▽╰)╭
private static ArrayList<Node> mDatas = null;
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<Node> a = new ArrayList<Node>();
Node na = new Node();
na.setData(10);
na.setIndex(0);
Node nb = new Node();
nb.setData(11);
nb.setIndex(1);
a.add(na);
a.add(nb);
R(a);// 调用,想一下结果?
R(a);// 再次调用,想想结果?
}
private static void R(ArrayList<Node> a) {
setData(a);
System.out.println("a的数据长度:" + a.size());
}
private static void setData(ArrayList<Node> array) {
if (mDatas != null) {
mDatas.clear();
mDatas = null;
}
mDatas = array;
System.out.println("mData的数据长度:" + mDatas.size());
}
结果是:
mData的数据长度:2
a的数据长度:2
mData的数据长度:0
a的数据长度:0
你对了么?
也许对了,那接下来你就不用看了?也许没对接下来继续看代码:
先声明一个类:
public class Node {
private int data;
private int index;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
接下来,看主要代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* 集合
*/
ArrayList<Integer> a=new ArrayList<Integer>();
Integer i1=1;
Integer i2=2;
a.add(i1);
a.add(i2);
ArrayList<Integer> b=a;
ArrayList<Integer> c=b;
c.clear();
System.out.println("集合的长度:"+a.size());
/**
* 数组
*/
int[] in=new int[10];
in[0]=1;
in[1]=2;
int[] ou=in;
ou[0]=0;
System.out.println("数组in的第一个元素:"+in[0]);
System.out.println("数组in第二个元素"+in[1]);
/**
* 自定义对象
*/
Node na=new Node();
na.setData(1);
na.setIndex(0);
Node ba=na;
ba.setData(2);
System.out.println("na的data等于:"+na.getData());
}
其实上面的代码很简单,就是全部先声明一个对象,然后再声明一个该对象类型的变量,再让其他的变量获得该对象的引用。例如:b=a,c=b,如果有java基础应该知道,b或者c获得的是a这个引用对象的地址,操作b或者c就是直接操作该对象。因此结果:
集合的长度:0
数组in的第一个元素:0
数组in第二个元素2
na的data等于:2
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u011625768/article/details/46895005