大家好,今天小编关注到一个比较有意思的话题,就是关于c语言给j***a传参的问题,于是小编就整理了1个相关介绍c语言给j***a传参的解答,让我们一起看看吧。

  1. 为什么Java只有值传递,但C# 既有值传递,又有引用传递,这种语言设计有哪些好处?

为什么J***a只有值传递,但C# 既有值传递,又有引用传递,这种语言设计有哪些好处?

引用传递的优点:

c语言给java传参-c语言到java
(图片来源网络,侵删)

有效避免了变量***的开销,比如参数是一个比较复杂的结构体,那么使用引用传递就比直接传递来得好,性能会有优势。

引用传递的缺点:

c语言给java传参-c语言到java
(图片来源网络,侵删)

引用传参,在函数中对该变量所做的修改,在函数返回后依然存在,这有时候其实并不是开发者希望的结局。

至于J***a为什么不提供引用传递这样的机制,可能是J***a语言设计者的一个思想问题,可能是为了保持简单、统一性。比如J***A里也没有多继承的概念,而在C++中是可以实现多继承的。J***a中没有自定义值类型的方式,既然J***a中所有自定义类型都是引用类型,那么这个语法作用就很有限,不支持就是正常的。

c语言给java传参-c语言到java
(图片来源网络,侵删)

而C#提供这样的机制,也是语言设计者的思路问题,可能是本着用户怎么方便怎么来的初衷而设计,C# 原本设计是用来代替 C++ 做 win32 开发的,之前很多用MFC做winform的,C#的出现使得winform开发变得快速、简单,我个人认为C#语言设计的很先进、优秀。

J***a有值引用也有址引用,只是J***a不推荐直接址引用,取消了指针,但其实时刻在用,比如,对象的调用,传的的是地址,不是值,这样规范了指针和址引用的方法,避免出错,使开发人员更专注业务实现而不是内存级的开发

J***a除基础数据类型外,没有值类型,只有引用类型。因此不存在需要大量拷贝的大结构体。对于基础数据类型,其长度与一个指针长度相近,不需要使用指针来避免太长的内存拷贝。对于引用类型,变量本身就是指向对象的指针,不需要额外套一层引用。因此J***a不需要引用传递。

C#作为更先进的语言,为了给与开发者更多的性能优化的空间和原生交互的体验,允许用户自定义更复杂的值类型,因此会涉及到size较大的值类型在传值时需要大量拷贝的情况,为了避免太长的内存拷贝,对变量进行引用传递是非常必要的。

到此,以上就是小编对于c语言给j***a传参的问题就介绍到这了,希望介绍关于c语言给j***a传参的1点解答对大家有用。