zoukankan      html  css  js  c++  java
  • JAVA的对象和引用——一个真实遇到的问题

    最近在写一段代码的时候,不懂JAVA的我被困住了。先简单描述一下要实现的效果:我要往secretVector里塞28个byteVector,这28个byteVector分别装着10个数值,而且这28个byteVector互不相同。

    public static Vector reformChildSecret(Vector fileVector){
    		Vector secretVector= new Vector();
    		Vector byteVector= new Vector();
    		for(int i= 0; i< 28; i++){
              byteVector.removeAllElements(); //关键看这里
    			for(int j= 0; j< 10; j++){
    				byteVector.add(j, ((Vector)(fileVector.get(j))).get(i));   //关键看这里 
    			}
    			secretVector.add(byteVector);	//关键看这里
    		}
    		System.out.println(secretVector.size());
    		return secretVector;
    	}
    

    那这段代码究竟能不能实现呢?不能!

    原因很简单:byteVector是一个对象引用,这个对象引用由始至终 只指向同一个Vector类的对象。JAVA有一个特点就是:不能直接操作对象,而是要通过对象引用来操作对象

    用这个原因来分析代码:

    1、每次把byteVector引用指向的对象内容清空;

    2、然后又往byteVector引用指向的对象里塞入10个数值;

    3、塞完后,把byteVector引用添加到secretVector引用指向的对象中;

    但问题在于,secretVector引用指向的对象装着的只是byteVector引用(而且装的都是同一个byteVector引用,而不是byteVector引用指向的对象的内容。而byteVector引用所指向的内容每次循环中都会发生变化,所以到最后,secretVector的每个元素的内容都是一样的,因为每个元素都是同一个byteVector引用,并且byteVector引用的内容最终会是最后一次add()的数值。

    另外,有一篇博文把Java对象和引用讲得挺清楚的,如果Java基础薄弱的可以看一下。博文地址:

    http://www.cnblogs.com/focusChen/articles/2497768.html

  • 相关阅读:
    音乐小转盘 css3 动画
    1.41
    1.4
    1.1
    课程设计——输出到TXT
    课程设计——c++中读取txt文件
    大二第一学期期末课程设计 2015.12.28
    无向图的广度优先遍历
    JS基本概念
    继承
  • 原文地址:https://www.cnblogs.com/samsenyang/p/5812347.html
Copyright © 2011-2022 走看看