我知道这个
Integer.parseInt(args[0]);
虽然在其他一些代码中我注意到了这个counts[(int) B.get(file,rank)];
,其中(int)
应该将返回的值从B.get
转换为整数。
我可以理解Integer.parseInt
语句的有效性,但第二个语句来自哪里,是否是正确的Java代码?
答案 0 :(得分:4)
第二个是cast
;它不会将一种对象转换为另一种对象,但它允许您更改使用该对象的形式。
假设我有Mammal
类型的对象,但我碰巧知道这个特定的实例是Cat
。我可以(Cat)myMammal
并参考Cat可能拥有的方法和属性。
毋庸置疑,这不是将字符串转换为int的方法。在您给出的示例中,您将获取一个未确定类型的对象(get
的输出)并断言它是一个int。只有当它真的是一个int时才会起作用。
如果要将字符串转换为int,则必须解析。
答案 1 :(得分:1)
Integer.parseInt()接受一个字符串并将其转换为int。
使用(int)只是一个强制转换,它不适用于字符串。通过告诉编译器您知道您所拥有的对象的转换已经是该特定类型。编译器信任,你 - 如果你弄错了,你将面临一个ClassCastException(尽管编译器会嘲笑你,如果对象不属于同一个继承层次结构,那么转换就无法工作。)< / p>
在基元的情况下,可以使用转换将基元从一种类型降级为另一种类型,因此通过删除小数组件将双重转换为int。
答案 2 :(得分:1)
恕我直言,这是一个无意义的,与自动装箱一起投射到整数组合会很好,但是我知道没有一个例子,当它编译时没有警告且没有错误。
final Map<String, Integer> m1 = new HashMap<String, Integer>();
m1.put("a", 42); // autoboxing
final int n = (int) m1.get(42); // WARNING: Unnecessary cast from Integer to int
final Map<String, Long> m2 = new HashMap<String, Long>();
m2.put("a", 43L); // autoboxing
final int n2 = (int) (long) m2.get(42); // fine
final int n2a = (int) m2.get(42); // ERROR: Cannot cast from Long to int
final Map<String, Object> m3 = new HashMap<String, Object>();
m3.put("a", 43); // autoboxing
final int n3 = (Integer) m3.get(42); // fine
final int n3a = (int) m3.get(42); // ERROR: Cannot cast from Object to int
也许这是对 Integer 的演员?