Java 如何增加整数左值

Java 如何增加整数左值,java,map,integer,Java,Map,Integer,我有一张打字的地图 Map<Character, Integer> tmp; 在第二行中,我更愿意做如下事情 tmp.get(key)++; Integer value = tmp.get(key); int intValue = value.intValue(); value = Integer.valueOf(intValue += 1); // different Integer reference now stored in value 我希望它能工作,因为我应

我有一张打字的地图

Map<Character, Integer> tmp;
在第二行中,我更愿意做如下事情

    tmp.get(key)++;
Integer value = tmp.get(key);
int intValue = value.intValue();
value = Integer.valueOf(intValue += 1); // different Integer reference now stored in value

我希望它能工作,因为我应该从get调用中获得对Integer对象的引用。但事实并非如此,Integer似乎除了int语法之外没有更新函数。没有办法绕过第一个构造吗

原语不适用于泛型,因此必须使用
Integer
对象,而不是
int

你不能用这个

tmp.get(key)++;
因为这会转化为

    tmp.get(key)++;
Integer value = tmp.get(key);
int intValue = value.intValue();
value = Integer.valueOf(intValue += 1); // different Integer reference now stored in value
因此您可以看到,
tmp
中的引用保持不变


你目前的做法是正确的。或者对包装递增操作的类执行建议的操作,例如
AtomicInteger

对不起,但不要使用整数包装类。包装器对象是不可变的,因此您实际上在那里获得了一个新的引用。考虑这个代码,

Integer i = 1;
Integer j = i;
System.out.printf("i=%d, j=%d, i == j is %b\n", i, j, i == j);
++i;
System.out.printf("i=%d, j=%d, i == j is %b\n", i, j, i == j);

您会注意到,
i
的增量对
j

没有影响,因为
Integer
类对象是不可变的,您不能修改它。你必须把结果放回地图上。一种选择是使用可变值,如:

Map-tmp;
tmp.get(ch).incrementAndGet();
您可以使用具有递增和递减功能的

if(tmp.containsKey(key))
    tmp.get(key).incrementAndGet();