C ++或Java中的类型转换和类型转换之间有什么区别?
问题内容:
C ++或Java中的类型转换和类型转换之间有什么区别?
问题答案:
类型 转换 将变量引用的值(内存块)视为与声明该变量的类型不同的类型。
类型 转换 实际上是在对该值进行转换。
在许多语言中, 某些 强制转换(通常是数字强制转换)的确会导致转换(这会因语言而异),但大多数情况下只是“将X当作Y处理”。
像人类语言的大多数方面一样,不幸的是,这些术语在不同社区中的使用略有不同,主要是沿着语言的不同。例如,请参见下面James关于C ++的评论-“
cast”一词的含义比上述定义要广泛得多,在C或Java模式中更多。只是为了使事情变得有趣,Java Language Spec实际上进入了 各种类型
的转换,包括
转换转换
。但是以上是一个很好的经验法则。
但是举一个简单的例子:
在Java中,在使用泛型之前,在处理地图时进行 很多 类型转换并不罕见:
Map m = new HashMap();
m.put("one", "uno");
// This would give a compiler error, because although we know
// we'll get a String back, all the compiler knows is that it's
// an Object
String italian = m.get("one");
// This works, we're telling the compiler "trust me, it's a String"
String italian = (String)m.get("one");
幸运的是,泛型的添加解决了这一问题,因为以这种方式进行转换往往是一个脆弱的过程,存在维护问题。
相反,如果您有数字字符串,则将进行 转换 :
String s = "1234";
…并且需要知道这些数字以十进制表示的数字:
// Wrong (cast)
int n = (int)s;
// Right (conversion)
int n = Integer.parseInt(s, 10);