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

  • 相关阅读:
    软件测试学习随笔(1) 引言
    集成测试
    SPM-using Maven and Juint
    验收测试
    白盒测试学习
    编码的UI测试
    测试闰年
    黑盒测试续
    黑盒测试方法-等价类划分
    对软件测试的理解
  • 原文地址:https://www.cnblogs.com/samsenyang/p/5812347.html
Copyright © 2011-2022 走看看