Java 初学者,有个疑问
代码如下
HashMap mapTest = new HashMap();
mapTest.put(1, "1");
mapTest.put(new Integer(1), "xx");
按我的理解应该用mapTest.put(new Integer(1), "xx"); 但为什么mapTest.put(1, "1");都工作正常呢?
虽然 1 能隐式转换成 Integer,但没有new吧?
很迷惑 :?
int是一种基本数据类型,而Integer是相应于int的类类型,称为对象包装。
实现这种对象包装的目的主要是因为类能够提供必要的方法,用于实现基本数据类型的数值与可打印字符串之间的转换。
这个地方如果便于理解的话,请直接是用new Integer(1)的方式,因为Map的key值时一个object对象,所以这个地方也是隐式的给对象包装了,还是给new了。
还有建议是用map对象时,采用如下的创建实例的方式
Map mapTest = new HashMap();
与你的那种的方式,性能可是大不一样的。 :)
这个问题,1可以转化成integer,自动的。在使用时int和integer没区别的,只是理论上,又是引用了,简单类型啦,什么的,麻烦
不知道自动转换是怎么处理的,但是Integer.valueOf(int i)最后还是new了的
那么推论对象还得new,只不过没出现在你的代码
可以理解成String和char的关系。Integer只是对int类型的封装!,
潜规则也就这么多
[quote]你的意思是简单类型又是特例情况,就跟String也是个特例一样。
真是折磨人,感觉不如C++清楚,至少该不该new完全自己控制,明明白白。
这儿搞这么多潜规则。 [/quote]
见多了就习惯了 呵呵!、
[code="java"]HashMap mapTest = new HashMap();
mapTest.put(1, "1");
mapTest.put(new Integer(1), "xx"); [/code]
两个都是对的! 默认可以转型的!
JDK 1.5 之后添加的新特性
int <---->Integer 可以自动转换!
所以不需加!