码迷,mamicode.com
首页 > 编程语言 > 详细

java的引用类型的引用所引发的问题

时间:2015-07-15 16:59:36      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:数据   str   集合   记录   基础   

看到标题也许感觉有点绕?先看看下面的问题!最近在做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

版权声明:本文为博主原创文章,未经博主允许不得转载。

java的引用类型的引用所引发的问题

标签:数据   str   集合   记录   基础   

原文地址:http://blog.csdn.net/u011625768/article/details/46895005

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!