C#有統一的類型系統,全部的類型包括原始類型(int,bool,short,long等類型)都繼承於Object類。 數組
Java略不一樣,它的原始類型不是繼承於Object,每一個原始類型都有對應的包裹類(繼承於Object),好比int的包裹類Integeride
C#有無符號整數,uint、ulong、ushort ui
Java沒有 指針
C#沒有高精度的decimal。 日誌
Java中有BigDecimal 對象
C#支持複數。Complex 結構 繼承
Java中沒有 接口
C#中有值類型。經過使用strutct關鍵字,能夠定義結構體,這種類型在傳遞的時候,是按值傳遞,而不是按引用傳遞。 內存
Java中只有原始類型。 ci
C#中有可空類型,Nullable。
Java中只有包裹類。
C#中容許有指針。
Java中無指針。
C#中,枚舉類型繼承於Enum類型,是值類型的一個派生物。
Java中,枚舉類型是一個class,它的值類的一個實例。
C#中有委託
Java中沒有
C#中有延遲綁定的類型,dynamic
Java中沒有
C#和Java中都有強引用和弱引用。
可是Java中還有一種軟引用和虛引用Phantom reference。
軟引用和弱引用相似,對象都是可達的,但仍然被GC回收。不一樣點在於,弱引用只要GC開始,就會被回收,而軟引用只用當JVM內存空間不足的時候纔會被回收。
虛引用的get方法永遠返回null,能夠用虛引用來引用咱們感興趣的對象,在GC回收的時候,會把該對象加到referenceQueue中。經過觀察referenceQueue,能夠知道對象是否被回收了。(此時咱們能夠在gc回收以前作一些其餘事情,好比記錄些日誌什麼的)
C#中支持二維矩形數組,單數組 int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };或者 int[,] a = { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };
Java中不支持,只支持數組的數組。
C#中裝箱操做時候隱式的,拆箱操做時顯式的。
Java中裝箱拆箱都是隱式的。
C#中 成員變量修飾符 public, internal, protected, private, protected internal
Java中 public, package, protected, private
C#類中,繼承的方法,默認爲new,必須顯示override才表示覆蓋。
Java中默認表示覆蓋。
C#中的內部類都是類級別的,能夠隨時在外部實例化。
Java中內部類必須是static的纔是類級別的,才能在外部被實例化。
C#支持分部類
Java不支持
C#中,枚舉類型不能實現接口。
Java支持枚舉類型實現接口。
C#支持運算符重載
Java不支持。
C#方法支持out,ref引用參數
Java不支持。
C#不支持常量參數
Java支持,final。標記final的參數,在方法中不能被修改。
public short getValue(final short index) {
if (index < values.length) {
index++; //出錯,index的值沒法修改.
return values[index];
}
else return -1;
}
C#支持命名參數,可選參數,分部方法,條件方法
Java不支持。
C#的泛型在運行時都是一個新的類型。
Java的泛型爲僞泛型,在運行時被擦除。