回 帖 发 新 帖 刷新版面

主题:求助:向量中int型元素如何读取

你好,刚刚在向量的int型读取上遇到了困难

import java.util.*;
public class test {
    private Vector vec=new Vector();
public test()
{
    for(int i=0;i<10;i++)
    {
        vec.addElement(i);
    }
    int test=(int)vec.elementAt(5);//这一行总是报错,请问如何解决呢?
}
    public static void main(String[] args) {
        new test();
    }
}

应该如何才可以得到vec中的int型元素呢??

急问,请大家帮帮忙

回复列表 (共5个回复)

沙发

vec.elementAt(5)  返回的是个Object

import java.util.*;

public class Testa {
    private Vector vec = new Vector();

    public Testa() {
        for (int i = 0; i < 10; i++) {
            vec.addElement(i);
        }
        
        //int test = (int) vec.elementAt(5);//这一行总是报错,请问如何解决呢?
        Integer t = (Integer) vec.elementAt(5);
        int test = t.intValue();
        
    }

    public static void main(String[] args) {
        new Testa();
    }
}

板凳

addElement(Object obj),他的参数是Object类型,所以改为:
vec.addElement(new Integer(i));

后面改为:
int t=new Integer(vec.elementAt(5).toString()).intValue();


import java.util.*;
public class test 
{
    
    public test()
    {
            Vector vec=new Vector();
            for(int i=0;i<10;i++)
            {
                vec.addElement(new Integer(i));
            }
            int t=new Integer(vec.elementAt(5).toString()).intValue();
            //int t=new Integer(vec.elementAt(5).toString()).intValue();
            System.out.println(t);
    }
        public static void main(String[] args)
        {
            new test();
        }
}

3 楼

今天看Thinking In java正好看到这个问题

本质上Java的世界里只有对象

不同于C++,java所有的对象类型都单根继承于Object类。
但是出于性能上的考虑
Java保留了原始数据类型
包括int,char,double等。
(所有数据类型 = 对象类型 + 原始类型)

为了维持世界观的统一,
对应每一种原始数据类型,都有一个包装的对象类型与其匹配。
例如,int - Integer,char-Character,double-Double
包装类按照原始数据的类型和大小,将其包装成为表示等值的一个对象,并提供了一系列获取数据的方法,供外界调用。

对于vector这样的聚集,其存在目的是存储一切可能出现的对象元素。
由于所有java对象都继承自Object,根据面向对象的继承特性,任何对象元素都是Object,以Object类型来存储就可以实现Vector存储和管理任意元素这一目标。
因此,之前你将int存入的动作,看起来似乎是存入了一个原始数据类型,但实际上这只是个假象。
真实的是存入时,int被自动包装成Integer,于是vector中就多了一个Integer对象。

原始数据类型完全是作为一种技术手段而存在的。
事实上Java中还有许许多多作为技术手段而存在的东西,包括最常见的我们声明的引用。Java的"问题世界观"里并没有它们,用对象思维来考虑真实世界问题的解决方案时应该无视它们的存在。

以上是我现阶段的理解,也并不是那么完善。其中具体的机制还是很值得研究的。
比较容易可以想到的就是,原始数据类型在方法中,以局部变量的身份出现的时候,是不需要额外的包装的,可是将其视作存取数据的一个临时仓库。
但是,一个类的原始数据类型成员变量,在内存中到底是被包装成对象形式,还是以其原始的面目来出现的,确是一个迷。

4 楼

import java.util.*;

 class Testa {
    private Vector<Integer> vec = new Vector<Integer>();  //指定Vector中的元素内容必须为Integer
    public Testa() {
        for (int i = 0; i < 10; i++) {
            vec.addElement(i);
        }
        
        int test = vec.elementAt(5);
        System.out.println (test);
               
    }

    public static void main(String[] args) {
        new Testa();
    }
}

5 楼

多谢大家

我来回复

您尚未登录,请登录后再回复。点此登录或注册