在c ++或java中,类型转换和类型转换有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

在c ++或java中,类型转换和类型转换有什么区别?

提问于
用户回答回答于

类型转型将一个变量引用的值(内存块)视为与该变量声明为的类型不同的类型。

类型转换实际上是对该值进行转换。

在很多语言中,一些强制转换(通常是数字转换)会导致转换(这会因语言而有所不同),但大多数情况下它只是“将此X视为Y”。

像人类语言的大多数方面一样,不幸的是,这些术语在不同的社区中使用的方式略有不同,主要是语言方面。例如,请参阅下面James关于C ++的评论 - “cast”一词的含义比上面的定义更广泛,这在C或Java模式中更多。为了让事情变得有趣,Java语言规范实际上进入了各种类型的转换,包括转换转换。但以上是一个很好的经验法则。

但要采取一个简单的情况:

在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);
用户回答回答于

类型转换仅仅是通过一支笔在变量上写入“this is a int”,转换实际上是将内容转换为所需的类型,因此该值保持有意义。

扫码关注云+社区