java version:
java version "1.8.0_211" Java(TM) SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
Test.java
package com.test.cast;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static Map<String, Object> MAP = new HashMap<>(2);
static {
MAP.put("int", 1);
MAP.put("string", "2");
}
public static void main(String[] args) {
// throws ClassCastException
String.valueOf(get("int"));
}
public static <T> T get(String k) {
Object o = MAP.get(k);
T o1 = (T) o;
return o1;
}
}
the code throws ClassCastException
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to [C
at com.test.cast.Test.main(Test.java:17)
Test.class
public class Test {
public static Map<String, Object> MAP = new HashMap(2);
public Test() {
}
public static void main(String[] args) {
// why char[]
String.valueOf((char[])get("int"));
}
public static <T> T get(String k) {
Object o = MAP.get(k);
return o;
}
static {
MAP.put("int", 1);
MAP.put("string", "2");
}
}
why does the java compiler choose to use char[]
why not use String.valueOf(int)