问题描述
C++ 或 Java 中的类型转换和类型转换有什么区别?
What is the difference between typecasting and typeconversion in C++ or Java ?
推荐答案
类型 casting 将变量引用的值(内存块)视为不同于声明变量的类型.
Type casting is treating a value (block of memory) referenced by a variable as being of a different type than the type the variable is declared as.
类型 conversion 实际上是在执行该值的转换.
Type conversion is actually performing a conversion of that value.
在许多语言中,一些 类型转换(通常是数字类型)确实会导致转换(这会因语言而异),但大多数情况下只是将此 X 视为 Y".
In many languages, some casts (usually numeric ones) do result in conversions (this will vary quite a bit by language), but mostly it's just "treat this X as a Y".
与人类语言的大多数方面一样,不幸的是,这些术语在不同社区的使用方式略有不同,主要是沿语言线.例如,请参阅下面 James 对 C++ 的评论 —那里的cast"一词的含义比上面的定义要广泛得多,后者更多地是在 C 或 Java 模型中.为了让事情变得有趣,Java 语言规范实际上包含了各种种类 类型,包括 强制转换.但以上是一个很好的经验法则.
Like most aspects of human language, unfortunately the terms are used slightly differently in different communities, mostly along language lines. For instance, see James' comment below about C++ — the word "cast" there has a much broader meaning than the above definition, which is more in the C or Java mold. And just to make things fun, the Java Language Spec actually gets into various kinds of casts, including casting conversions. But the above is a good rule of thumb.
但举个简单的例子:
在 Java 中,在泛型之前,在处理地图时必须进行大量的类型转换并不罕见:
In Java, prior to generics it wasn't unusual to have to do a lot of typecasting when dealing with maps:
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");
幸运的是,添加 generics 解决了这个问题,因为以这种方式进行投射往往是一种存在维护问题的脆弱流程.
Fortunately, the addition of generics addressed this, as casting in this way tends to be a fragile process with maintenance issues.
相比之下,如果你有一个数字字符串,你会转换:
In contrast, you'd convert if you had a String of digits:
String s = "1234";
...并且需要知道这些数字以十进制表示的数字:
...and needed to know what number those digits represented in decimal:
// Wrong (cast)
int n = (int)s;
// Right (conversion)
int n = Integer.parseInt(s, 10);
这篇关于C++ 或 Java 中的类型转换和类型转换有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)