主题:求助:向量中int型元素如何读取
飞侠
[专家分:1380] 发布于 2007-11-15 10:30:00
你好,刚刚在向量的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个回复)
沙发
sjhlovejava [专家分:1690] 发布于 2007-11-15 12:33:00
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();
}
}
板凳
haoboy0817 [专家分:880] 发布于 2007-11-15 13:18:00
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 楼
lalar [专家分:150] 发布于 2007-11-15 15:39:00
今天看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 楼
happyboy2007 [专家分:3900] 发布于 2007-11-15 18:24:00
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 楼
飞侠 [专家分:1380] 发布于 2007-11-16 00:03:00
多谢大家
我来回复