全部產品
Search
文件中心

OpenSearch:Cava 類型和變數定義

更新時間:Jul 13, 2024

cava中支援以下兩種類型的類型定義。

變數定義

cava中支援以下兩種類型的類型定義

  • 局部變數

  • 類的成員變數

註:cava中不支援類變數,定義類變數會引發編譯錯誤,具體見Cava 修飾符

局部變數

數實值型別變數

  • 定義一個 int類型的局部變數 a,並賦值為 10

class Example {
    // ...
    int test() {
        int a; // <==
        a = 10;
        return a + 1;
    }
    // ...
}
  • 直接使用初始值 10定義局部變數 a

class Example {
    // ...
    int test() {
        int a = 10; // <==
        return a + 1;
    }
    // ...
}

物件變數

物件變數定義後需要使用 new語句建立相應的對象。否則變數的內容為 null,訪問會產生null 指標異常。

class Example {
    public double PI;
    Example(double customPI) {
        this.PI = customPI;
    }
    static int main() {
        Example a = new Example(3.1415926); // <==
        return 0;
    }
}

數群組類型變數

  • 定義具有 10個元素的 int類型數組 a,並依次初始化為 [0..9]

class Example {
    // ...
    int test() {
        int[] a = new int[10]; 
        for (int i = 0; i < a.length; ++i) {
            a[i] = i; 
        }
        return a[0];
    }
    // ...
}
  • 使用初始化列表,定義 int類型的數組,並初始化為 [0..9]。注意:數組的長度由編譯器自動推導。

class Example {
    // ...
    int test() {
        int[] a = new int[]{0,1,2,3,4,5,6,7,8,9}; 
        return a[0];
    }
    // ...
}
  • 建立對象數組。注意:對象數組建立完畢後,還需要為數組中的元素依次建立對象。

class Example {
    public double PI;
    Example(double customPI) {
        this.PI = customPI;
    }
    static int main() {
        Example[] a = new Example[10]; // 建立對象數組
        for (int i = 0; i < a.length; ++i) {
            a[i] = new Example(3.1415926); // 初始化數組中的每個對象
        }
        return 0;
    }
}

類的成員變數

類的成員變數的定義和使用見Cava 類與對象

內建類型

cava中內建了以下常見類型,供直接使用(括弧內為類型的實際記憶體大小):

  • booelan(1位元組)

  • byte(1位元組)

  • char(2位元組)

  • short(2位元組)

  • int(4位元組)

  • long(8位元組)

  • float(4位元組)

  • double(8位元組)

值得一提的是,char類型在內部使用2個位元組的編碼,與Java的utf16編碼格式基本一致,採用定長的2個位元組,而不是可變長的utf16。

在類型間進行轉換

和大部分語言一樣,內建的數實值型別存在一定的可轉換關係,在合適的情況下,編譯器會插入程式碼完成數實值型別之間的轉換。

相容類型自動轉換

當源類型和目標類型之間存在如下關係時:

  • 目標類型數值表示範圍包含源類型的數值表示範圍(主要針對整數類型)

  • 源類型轉換為目標類型後,數值精度不會丟失(主要針對浮點類型)

稱為轉換是安全的。例如, short類型到 int類型的轉換、 float類型到 double類型的轉換都是安全的。編譯器會自動插入程式碼完成此類轉換:

float a = 3.14f;
double b = a;

short c = -1;
int d = c;

cava中各種類型之間的類型轉換規則與其它常見程式設計語言(Java、C++)一致。

類型強制轉換

某些數實值型別在轉換時存在精度丟失或者表示範圍不匹配的問題,這種情況下編譯器會進行檢查並提示錯誤,例如:

double a = ...;
float b = a; // error,存在丟失數值精度風險

由於此類轉換一般是不安全的,所以編譯器禁止代碼自動進行此類轉換。如果使用者明確掌握類型間轉換存在的風險,可以在代碼中顯式使用強制類型轉換,避免編譯器報錯。

float a = 3.14f;
int b = (int)a; // 小數部分會被丟棄,僅保留整數部分,實現取整效果

自訂類型

cava中支援類的定義和對象的使用,具體用法見Cava 類與對象