千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:广州千锋IT培训  >  技术干货  >  Java中的泛型与C中的泛型有区别?

Java中的泛型与C中的泛型有区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-15 21:57:58

一、Java中的泛型与C中的泛型的区别

它们之间有很大的区别。在C ++中,您不必为泛型类型指定类或接口。这就是为什么您可以创建真正的泛型函数和类,而不必担心松散的键入。

1template  T sum(T a, T b) { return a + b; }

上面的方法添加了两个相同类型的对象,并且可以用于任何具有” +”运算符的类型T。

在Java中,如果要在传递的对象上调用方法,则必须指定一种类型,例如:

1 T sum(T a, T b) { return a.add ( b ); }

在C ++中,泛型函数/类只能在标头中定义,因为编译器会针对不同的类型(使用其调用)生成不同的函数。因此编译速度较慢。在Java中,编译不会带来很大的损失,但是Java使用一种称为”擦除”的技术,其中泛型在运行时被擦除,因此在运行时Java实际上正在调用…

1Something sum(Something a, Something b) { return a.add ( b ); }

因此,Java中的通用编程并不是真正有用,它只是语法上的一点帮助新的foreach构造。

基本上,在C ++中,模板基本上是经过修饰的预处理器/宏集(注意:由于某些人似乎无法理解类推,因此我并不是说模板处理是宏)。在Java中,它们基本上是语法糖,可以最大程度地减少对象的样板转换。这是对C ++模板与Java泛型的相当不错的介绍。

要详细说明这一点:使用C ++模板时,基本上是在创建代码的另一个副本,就像使用#define宏一样。这使您可以执行诸如在模板定义中使用int参数来确定数组大小等操作。

延伸阅读:

二、C++泛型

C++泛型跟虚函数的运行时多态机制不同,泛型支持的静态多态,当类型信息可得的时候,利用编译期多态能够获得最大的效率和灵活性。当具体的类型信息不可得,就必须诉诸运行期多态了,即虚函数支持的动态多态。

对于C++泛型,每个实际类型都已被指明的泛型都会有独立的编码产生,也就是说list和list生成的是不同的代码,编译程序会在此时确保类型安全性。由于知道对象确切的类型,所以编译器进行代码生成的时候就不用运用RTTI,这使得泛型效率跟手动编码一样高。

显然这样的做法增加了代码空间,相比运行时多态,是以空间换时间。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

云下载和本地重新安装有什么区别?

2023-10-15

为什么Java中“1000==1000”为false,而”100==100“为true?

2023-10-15

为什么编程语言中没有占用5个字节的int40?

2023-10-15

最新文章NEW

Spring和Spring Boot有什么区别?

2023-10-15

CameraX 1.1 有哪些新的特性发布?

2023-10-15

为什么二叉堆只能删除堆顶元素?

2023-10-15

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>