java-Java中关于Vector句柄的问题

问题描述

Java中关于Vector句柄的问题

这段代码中:
import java.util.*;
class CrashJava{
?public static void main(String[] args) ?{
? ?Vector v = new Vector();
? ?for(int i = 0; i < 10; i++)
???v.addElement(new CrashJava());
??System.out.println(v);
?}
}
为什么打印出的是Vector中的所有元素的地址呢?v不是只是指向列表的首地址吗,为什么不需要用for就会打印出所有的呢?而如果要打印出它们的内容,则需要用for(...)呢?谢谢了!

解决方案

Vector是继承了抽象类并且实现了List接口的线程安全类,当用户打印对象的时候,实际上调用的是Vector的toString()方法,以下是toString()方法的实现
public String toString() {
Iterator i = iterator();
if (! i.hasNext())
return "[]";

StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
    E e = i.next();
    sb.append(e == this ? "(this Collection)" : e);
    if (! i.hasNext())
    return sb.append(']').toString();
    sb.append(", ");
}
}

从代码中可以看出,实际上是将Vector内部的元素连接并打印出来的,,
纯手打,请采纳,如有不理解,请查看相关API,,

解决方案二:

楼上正解啊!

System.out.println(v);
这样写的时候,打印的是v的toString()方法,而Vector的toString方法就是像上面说的那个,遍历整个集合并组成"[o1,o2,...]"这样的字符串。当然,在取得o1这个对像的字符串的时候也是toString了。

而你开头问的问题,为什么不是打印"列表的首地址",这是因为有些对象是没有像Vector这样独立实现了toString方法的,所以还是使用最原始的Object.toString,而Object的toString方法,就是返回你认为的那个"列表的首地址"。

最后一点,在Java中是没有"列表的首地址"这个像你说的Windows中的句柄的东西的,也没有指针,你看到的那个"列表的首地址"其实是hashCode方法有关的返回值,和内存地址也有关。

http://www.minidownend.com/

时间: 2024-08-02 13:33:54

java-Java中关于Vector句柄的问题的相关文章

Java编程中的vector类用法学习笔记_java

java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量.比如在c,c++中所谓的"动态数组"一般都由指针来实现.为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一.事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用. 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先

详解Java编程中向量(Vector)的应用_java

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据(数据列表).但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于"动态数组"的功能,向量与数组的重要区别之一就是向量的容量是可变的. 可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量. 向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量: 如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对

java-【求助】关于JAVA中的Vector的问题

问题描述 [求助]关于JAVA中的Vector的问题 在读Thinking in Java的时候,看到这样一段代码,有点迷惑,希望高手帮忙解答一下~class GopherVector{ private Vector v = new Vector(); public void addElement(Gopher m){ //Gopher为之前定义过的一个类 v.addElement(m); }}这段代码不明白的地方是第四行v.addElement(m),如果我GopherVector g = n

java中的操作句柄的问题

问题描述 java中的操作句柄的问题 在学习java的过程中,遇到这样一个问题:值传递和引用传递 我知道在所谓的值传递,仅仅是复制,然后传递,这样修改的值不会影响原值(基本数据类型都是值传递) 而引用传递是传的事地址,这样修改的话,原值也会被修改(类似于函数的参数如果是一个对象的话) 以上是我的理解,不对之处,请各位指正和补充(新人初学,谢谢) 但是还有这样一个问题: A a = B.方法 这条语句和A a = new A();创建对象有点像,之前问过一次,但是不是很理解,所以再次问下,还望各位

Java开发中的23种设计模式详解(转)

Java开发中的23种设计模式详解(转) 设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合

Java开发中的23种设计模式详解(推荐)_java

设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每

java对象中属性值为空字符串的问题

问题描述 java对象中属性值为空字符串的问题 业务逻辑中需要将对象中为空字符串的属性转换为null,首先我想到是将对象转为一个数组, 然后遍历数组,将""转为 null ,不过这样应该不对,大家给个思路 解决方案 用 反射 获得所有字段的数组,然后遍历判断~~~~~~ 解决方案二: 你为什么还要遍历呢,你前台传过来的数据先处理再装对象,这样才对 解决方案三: 传到后台后,先判断 if("".eques(name)){ name=null; } object.set

java代码-关于CSDN英雄会挑战赛 java编程中的一些问题

问题描述 关于CSDN英雄会挑战赛 java编程中的一些问题 各位大神,我在挑战英雄会的题目的时候,在线下运行的没有问题,可是一提交就会提示,"挑战失败:你的程序正常编译,不过运行时发生错误,通常是代码有问题,如除数为零数组上下界溢出等" 我觉得可能是java输入数据时的问题,因为题目要求:输入多行数据,输出多行我是这样写的: Scanner scanner = new Scanner(System.in); ArrayList list = new ArrayList(); do {

方法-JAVA项目中做登录加密操作

问题描述 JAVA项目中做登录加密操作 在项目中做用户登录操作,如果一个陌生人随意乱输用户名和密码,假定正好输入都正确(数据库中已保存的),为避免此类问题发生,要对登录做加密,使用MD5方法是不是比较好,是否还有其它好的方法,谢谢 解决方案 因此,作为这个用途,那些不可逆的散列算法都可以达到这个目的,比如MD5.SHA1等等,以及它们的变种,比如两次MD5,加上一个随机数再MD5(俗称加盐).为什么要变化?因为人们将常见密码和MD5存入一个很大的数据库,所以反插起来很容易. 解决方案二: MD5