我有一张地图。
Map<Character, Integer> map1 = new TreeMap<Character, Integer>();
我使用此地图存储我在扫描文件时遇到的唯一字符。我收到String
并使用String.toCharArray()
来存储char
数组中的字符。
如果我尝试从我的char数组中放一个元素,比如说map1.put(charay[I], 1)
,那么地图会将它解释为它的包装类吗?或character
和char
不同。我正在做一些研究,看起来你在原始数据类型不能工作时会使用包装类(比如地图),但是我会做什么工作?
答案 0 :(得分:1)
字符和字符不一样,前者是一个类,后者是一个原始类型,尽管如你所说,类可以被认为是提供一个对象实例&#34; wrapper&#34;在仅允许对象而不是基元的位置表示基本类型。
在你的代码表明必须从一个转换到另一个转换的任何地方,而不是给你一个编译器错误,而java编译器(javac)将为你插入自己的代码,代码将进行转换为了你。转换称为自动装箱和自动拆箱,相当于执行Character.valueOf(char)和Character.charValue()。此外,编译器将对生成的Character对象进行缓存以限制内存消耗。自动装箱只是编译器插入此转换和缓存代码,以便您的可见代码看起来更干净,但实际上发生了什么,编译器只插入了一些额外的代码。
答案 1 :(得分:0)
是。来自链接的Autoboxing(注意示例),
Autoboxing 是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。例如,将
int
转换为Integer
,将double
转换为Double
,依此类推。如果转换采用另一种方式,则称为拆箱。以下是自动装箱的最简单示例:
Character ch = 'a';