最近在写一段代码的时候,不懂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

JAVA的对象和引用——一个真实遇到的问题的更多相关文章

  1. Java中对象和引用的理解

    偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...

  2. Java中对象与引用

    初学Java 时.在非常长一段时间里,总认为基本概念非常模糊. 后来才知道.在很多Java 书中.把对象和对象的引用混为一谈. 假设分不清对象与对象引用,那实在没法非常好地理解以下的面向对象技术.把自 ...

  3. Java对对象的引用 不是 引用调用 而是按值引用 Java不存在引用调用

    call by reference Java call by value

  4. Java值传递还是引用传递?

    回顾: 在程序设计语言中,将参数传递分为按值调用和按引用调用.按值调用:表示方法接收的是调用者提供的值.而按引用调用表示方法接收的是调用者提供的变量地址.一个方法可以修改传递引用所对应的变量值,而不能 ...

  5. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  6. java传值与传引用总结

    基本数据类型 我们先来看一个代码 public class ParamTest { public static void main(String[] arge) { double percent = ...

  7. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  8. Java数据类型和对象的引用

    在Java中,变量分为两类: 1.基本类型变量,java是传递的副本 2.一切对象型变量,传引用副本的实质是复制指向地址的指针 a.基本类型引用 public class BasicTransmit ...

  9. 一天一个Java基础——对象和类

    1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...

随机推荐

  1. Adnroid Studio使用技巧

    官方第一条提示:所有的使用技巧都可以通过Help→Tips of the Day查看. 下面摘抄一些比较有用的技巧: 1.Esc把活动窗口从工具窗口指向编辑窗口.F12把编辑窗口指向上一次活动的工具窗 ...

  2. Android Service(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

  3. linux上备份Oracle时EXP-00091的错误解决方法

    unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable stati ...

  4. (原)Ubuntu14中安装GraphicsMagick

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5661439.html 参考网址: http://comments.gmane.org/gmane.co ...

  5. 负载均衡集群之LVS配置命令

    ipvs/ipvsadm 添加集群服务--> ipvsadm -A|E -t|u|f VIP[:Port] -s scheduler [-p timeout] [-O] [-M netmask] ...

  6. dojo Tree 添加、删除节点

    var tree=this.tree; var store=tree.model.store; if(this.node){ console.log(this.node) var children=t ...

  7. 梯田(dfs)

    梯田 Time Limit: 2000 ms   Memory Limit: 256 MBTotal Submission: 26   Submission Accepted: 5   Descrip ...

  8. StringBuilder是不是线程安全的?

    测试条件: 开启2个并行执行任务,往同一个StringBuilder对象写入值 测试代码: ; static StringBuilder sbIsThreadSafe = new StringBuil ...

  9. checkbox选中问题

    <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  10. ***.M51文件详细注释

    ;说明:这是1950编译后生成的Keil_1910.M51文件,以此为例来讲解M51文件 // :: PAGE BL51 BANKED LINKER/LOCATER V6., INVOKED BY: ...