回覆列表
  • 1 # 熱血蘭博

    引用傳遞的優點:

    有效避免了變數複製的開銷,比如引數是一個比較複雜的結構體,那麼使用引用傳遞就比直接傳遞來得好,效能會有優勢。

    引用傳遞的缺點:

    引用傳參,在函式中對該變數所做的修改,在函式返回後依然存在,這有時候其實並不是開發者希望的結局。

    至於Java為什麼不提供引用傳遞這樣的機制,可能是Java語言設計者的一個思想問題,可能是為了保持簡單、統一性。比如JAVA裡也沒有多繼承的概念,而在C++中是可以實現多繼承的。Java中沒有自定義值型別的方式,既然Java中所有自定義型別都是引用型別,那麼這個語法作用就很有限,不支援就是正常的。

    而C#提供這樣的機制,也是語言設計者的思路問題,可能是本著使用者怎麼方便怎麼來的初衷而設計,C# 原本設計是用來代替 C++ 做 win32 開發的,之前很多用MFC做winform的,C#的出現使得winform開發變得快速、簡單,我個人認為C#語言設計的很先進、優秀。

  • 2 # 2297131

    c#引用傳遞很好用,但是不好的地方在於如果作為引數傳遞之後容易讓很多人產生誤操作。各有優缺點,不過用熟練了之後我覺得引用傳遞更方便

  • 3 # 暱稱很難的

    Java有值引用也有址引用,只是Java不推薦直接址引用,取消了指標,但其實時刻在用,比如,物件的呼叫,傳的的是地址,不是值,這樣規範了指標和址引用的方法,避免出錯,使開發人員更專注業務實現而不是記憶體級的開發

  • 4 # Alsein

    Java除基礎資料型別外,沒有值型別,只有引用型別。因此不存在需要大量複製的大結構體。對於基礎資料型別,其長度與一個指標長度相近,不需要使用指標來避免太長的記憶體複製。對於引用型別,變數本身就是指向物件的指標,不需要額外套一層引用。因此Java不需要引用傳遞。

    C#作為更先進的語言,為了給與開發者更多的效能最佳化的空間和原生互動的體驗,允許使用者自定義更復雜的值型別,因此會涉及到size較大的值型別在傳值時需要大量複製的情況,為了避免太長的記憶體複製,對變數進行引用傳遞是非常必要的。

  • 中秋節和大豐收的關聯?
  • 你玩過哪一款遊戲最有武俠味?