java中关于泛型的两个问题

classPoint<T>{//此处可以随便写标识符号,T是type的简称privateTvar;//var的类型由T指定,即:由外部指定publicTgetVar(){... class Point<T>{ // 此处可以随便写标识符号,T是type的简称
private T var ; // var的类型由T指定,即:由外部指定
public T getVar(){ // 返回值的类型由外部决定
return var ;
}
public void setVar(T var){ // 设置的类型也由外部决定
this.var = var ;
}
};
public class GenericsDemo05{
public static void main(string[] args)
point<Integer> p=new point<Integer>();
p.setVar(30);
System.out.println(p.getVar()*2);
}
上面这段代码运行结果是60,。可是问题是代码最后一行p.getVar()得到的是Integer类型的对象应该输出地址才对呀。再看下面这段代码
class Info<T>{
private T var ; // 定义泛型变量
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){ // 直接打印
return this.var.toString() ;
}
};
public class GenericsDemo14{
public static void main(String args[]){
Info<String> i = new Info<String>() ; // 使用String为泛型类型
i.setVar("MLDN") ; // 设置内容
fun(i) ;
}
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
};
也是最后一行如果想输出"MLDN"应该改为 System.out.println("内容:" + temp.var) ;可实际上不该就能输出"MLDN"
这两个问题希望明白人给解答一下
展开
 我来答
footuser
2014-11-25 · 超过10用户采纳过TA的回答
知道答主
回答量:29
采纳率:100%
帮助的人:12.6万
展开全部
问题一:p.getVar()得到的是Integer类型,但是*2表达式会自动unbox成int再执行*2运算
问题二:println()方法会自动调用对象的toString方法,变成打印temp.toString(),即等价于System.out.println("内容:" + temp.toString()) ,所以输出MLDN
追问
unbox是什么意思
追答
是拆箱的意思,从jdk1.5以后的版本加入的。
当Integer和int类型进行算术运算的时候,编译器会先自动调用integer.intValue()得到一个int类型再和后面的int类型进行算术运算。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吹阴风点鬼火
2014-11-25 · TA获得超过211个赞
知道小有建树答主
回答量:474
采纳率:100%
帮助的人:303万
展开全部
第一个:p.getVar()当然是拿到Integer对象,自动解包技术,转成int

第二个:System.out.println是调用对象的toString方法,第二个重写了这个方法~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乌微月2S
2014-11-25 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2901万
展开全部
1 Integer对象*2会自动拆箱。然后就输出地址了。
另外Integer对象有重写toString方法。
public static void fun(Info<?> temp){ // 可以接收任意的泛型对象
System.out.println("内容:" + temp) ;
}
如果是public static void fun(Info<String> temp){应该就可以了。
因为穿进去的是?,泛型丢了,this.var.toString() 就不会调用String类的toString方法吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式