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
JAVA的对象和引用——一个真实遇到的问题的更多相关文章
- Java中对象和引用的理解
偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两方面去更形象的认识理解,再去记忆. 一.对象和引用的概念: 在Java中万 ...
- Java中对象与引用
初学Java 时.在非常长一段时间里,总认为基本概念非常模糊. 后来才知道.在很多Java 书中.把对象和对象的引用混为一谈. 假设分不清对象与对象引用,那实在没法非常好地理解以下的面向对象技术.把自 ...
- Java对对象的引用 不是 引用调用 而是按值引用 Java不存在引用调用
call by reference Java call by value
- Java值传递还是引用传递?
回顾: 在程序设计语言中,将参数传递分为按值调用和按引用调用.按值调用:表示方法接收的是调用者提供的值.而按引用调用表示方法接收的是调用者提供的变量地址.一个方法可以修改传递引用所对应的变量值,而不能 ...
- Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数
本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...
- java传值与传引用总结
基本数据类型 我们先来看一个代码 public class ParamTest { public static void main(String[] arge) { double percent = ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- Java数据类型和对象的引用
在Java中,变量分为两类: 1.基本类型变量,java是传递的副本 2.一切对象型变量,传引用副本的实质是复制指向地址的指针 a.基本类型引用 public class BasicTransmit ...
- 一天一个Java基础——对象和类
1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...
随机推荐
- 上拉、下拉UITableView,交互式 模态弹出(自定义弹出动画)
部分代码 InteractiveTransition 类继承NSObject: - (instancetype)initWithPresentingController:(UITableViewCon ...
- 常用的方法,读取XML节点并赋值给List集合
一.前言 很多时候也可以直接在XML文件中配置好节点,在程序需要用到的时候,修改XML文件并不需要重新编译,这里是在极光推送中拿出来的一部分代码.代码简单,大家直接看例子吧. 二.实现过程 1.新创建 ...
- java实例变量及方法调用顺序
public class Base { private String name="base"; public Base(){ sayHello(); } void sayHello ...
- hdu1215七夕节
Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...
- 认识WebSocket理论篇
本文转自http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/ HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas.本 ...
- Tomcat学习笔记 - 错误日志 - Tomcat部署项目或修改xml配置出现无法保存的情况(拒绝访问)
原因分析:(windows下) 可能有人会发现在编辑好 tomcat-users.xml 文件后无法保存,原因是使用的用户没有权限修改文件,可能是把 Tomcat 发行包放到了一个需要管理员权限才能修 ...
- Javascript经典实例 - 正则表达式
1] 正则常用字符 正则表达式常用的特殊字符 字符 匹配 示例 ^ 匹配输入的开始 /^This/匹配 “This is ...” $ 匹配输入的结束 /end$/匹配“This is the end ...
- [C++程序设计]用指针变量作函数参数接收数组地址
#include <iostream> using namespace std; void select_sort(int *p, int n) { int i, j, k; ; i &l ...
- Bootstrap 模态对话框只加载一次 remote 数据的解决办法
原文: https://my.oschina.net/qczhang/blog/190215?p=1
- 【Xamarin挖墙脚系列:关闭 OS X El Capitan 中 SIP 安全设置功能】
比如需要修改内核配置文件: com.apple.Boot.plist 那么我们需要解锁权限. 禁止SIP模式,那么就可以修改此文件了. 在 OS X El Capitan 中有一个跟安全相关的模式叫 ...