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