【.Net vs Java? 】 先來看一下Java和C#的數據類型區別。

新工作.Net和Java都要做,早期也做過一段Java的項目,但沒有系統的深入學習過。一直覺得這兩門語言估計是最相近的兩門語言了,好多代碼可以說直接拷過來都不帶報錯的,但仔細推敲還是有很多的不同。

1. 基本數據類型

Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。

C#提供的類型更細一些。

Java沒有基本的decimal類型,有個BigDecimal類型,是一個繼承於Number類的類。

C# Java
布爾型 bool boolean
字符型 char char
整形 byte byte
sbyte
int int
uint
nuint
long long
unlong
short short
unshort
浮點型 decimal BigDecimal*
double double
float float

2.結構類型

C#提供像C語言一樣的結構體(struct )類型,Java沒有此類型,一般通過類實現類似功能。

3.枚舉類型

二者都有枚舉類型enum。

C#的枚舉類型時值類型,默認情況下,枚舉成員的關聯常數值為類型 int;它們從零開始,並按定義文本順序遞增 1。 可以顯式指定任何其他整數數值類型作為枚舉類型的基礎類型。

enum HttpCode : ushort
{
    OK = 0,
    BadRequest= 400
}

Java的枚舉類型是通過類實現的,所以可以為其添加屬性和方法等。

public class Simple {
    enum HttpCode
    {
        OK("請求成功!", 200),
        BadRequest("請求失敗!", 400);

        // 成員變量
        private String message;
        private int code;

        // 構造方法
        private HttpCode(String message, int code) {
            this.message = message;
            this.code = code;
        }

        // 覆蓋方法
        @Override
        public String toString() {
            return this.message;
        }
    }

    public static void main(String[] args) {
        System.out.println(HttpCode.BadRequest.toString());
    }
}

Java的枚舉成員都是通過 Class 在內部實現的,且所有的枚舉值都是 public static final 的。

上面的枚舉類代碼可以理解為:

public final class HttpCode extends Enum{ 
    public static final HttpCode OK; 
    public static final HttpCode BadRequest; 
}

4.元組類型

C#7.0之後提供類元組類型。Java中JDK原生不支持元組,但有框架javatuples支持元祖。

5.可空值類型與包裝類型

C#為值類型提供了對應的可空值類型,例如int->int?,本質是通過結構體實現的。

Java為值類型提供了對應的包裝類型,例如int->Integer,包裝類型為引用類型。

6.Object、String

二者都以Object類型作為所有類型的基類,都提供了String類(以及StringBuilder),注意首字母大小寫不同。