关于JAVA泛型问题,自动转换与手动转换。

首先,List<String>list1=newArrayList();list1.add(123);list1.add("cccc");list1.add("cc11"... 首先,List<String> list1=new ArrayList();
list1.add(123);
list1.add("cccc");
list1.add("cc11");
会出现错误。可以很明显的看到。比如说:list.add(123);就不符合。

List list1=new ArrayList<String>();
list1.add("cccc");
list1.add("cc11");
list1.add(123);
可是这个,如果输出的话, list.add(123);是会打印出来的。
有人说这个会自动转换的,那么是不是意味着ArrayList<String>();会转换为其他的?
因为123是数字型,可是它会输出,也就是说<String>这个就不管用了。

我知道 List list=new ArrayList();两边都加泛型比较好。
可是,我就是对 只单独加一边存在疑问。
为什么加在左边与右边不同。

而且是不是真的存在手动转换与自动转换的原因?
展开
 我来答
看箩宁馆za
2012-10-18 · TA获得超过684个赞
知道小有建树答主
回答量:450
采纳率:0%
帮助的人:93.4万
展开全部
两边都加的话一定不会错!
你就是问
List<String> list1=new ArrayList();
List list1=new ArrayList<String>();
有什么不同吧 。
左边是定义,右边是赋值。List<String> list1 定义了类型是String所以加不上去
而ArrayList是List的子类,我们知道父类可以 new 一个子类实现实例化。
这种父类的实例可以用自己的所有方法,不过父类某个方法被子类重写了的话会覆盖该方法。
疏狂山人
2012-10-18 · TA获得超过1940个赞
知道小有建树答主
回答量:395
采纳率:100%
帮助的人:218万
展开全部
因为你list1是左边类型的实例,你开始可以不实例化List list1=null;List list1;
后面你可以根据需要使用不同的实例化方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
H90P0820
2012-10-18 · TA获得超过100个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:120万
展开全部
加在左右两边两个的意思完全不同:
左边的意思是一个 String 型的LIST 数组 所以添加的时候有限制。
右边的意思是一个LIST数组 这是父类指向子类,判断时是根据父类的变化而变化,父类LIST 可以存放任何类型的数组。

一般泛型都是2边同时限制,这样才有意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
slk不再简单
2012-10-18
知道答主
回答量:20
采纳率:0%
帮助的人:9.9万
展开全部
从JVM的角度来分析出错原因:
先说List<String> list1=new ArrayList();
大家知道 new 是通知虚拟机在对内存上开辟空间,new ArrayList(); 是通知虚拟机在对内存上开辟一个数组空间具体存储什么这块堆内存是不知道的,List<String> list1是将list1存储的指针指向 new出来的new ArrayList(); 是在指针入口处指定了list1 只能指向包含String的ArrayList,所以你在添加的时候其实不会保存而是在校验指针类型的时候报错。
再说List list1=new ArrayList<String>();
对于List list1=new ArrayList<String>();在new ArrayList<String>();的时候就已经为堆内存加了限制只存储String,所以任何可以转化成String类型的东西都会自动转型,而List list1的指针入口是没有限制的所以可以顺利执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式