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);