首頁  >  文章  >  Java  >  java與c語法上的差別是什麼?

java與c語法上的差別是什麼?

青灯夜游
青灯夜游原創
2019-11-15 15:26:512756瀏覽

java與c語法上的差別是什麼?

java與c語法上的差異是什麼?

1、識別碼:

C可用的識別碼為數字、大小寫字母、底線,不能以數字開頭;【推薦教學:C語言教學

Java可用的識別碼除了C的三種以外,多一種美元符號($),同樣不能以數字開頭。 【推薦學習:java課程

2、關鍵字:

C中的關鍵字有:

#auto   break    case    char   const

continue   default    do    double      int    long    register   return

short   signed    sizeof    static struct

switch   typedef    union    unsigned   void

volatile   while

##Java)

catch   char    class    continue   default

do   double    else   

##implements    import   instanceof    int    interface

# long   native    new    null   package

private   protected    public          static    super    switch   synchronized

void   volatile    while

#3、資料型態:

C中的資料型別有:

##基本型別:整數型(基本整型int、短整數short[int]與長整型long [int]以及有符號型[signed]、無符號型unsigned)、字元型[signed/unsigned ]char、浮點型(單精確型float、雙精度型double和長雙精度long double)、枚舉類型

#建構型別:陣列型別、結構體型別、共用體型別

##指標型別
  1. 空白型別
  2. 請注意下各型別一般所佔位元組數:
  3. # int:2位元組

  4. short:2位元組
  5. long:4位元組

  6. char:1位元組
##float:4位元組

double:8位元組

long double:16位元組

以上儲存除char類型外,其他視系統不同略有不同,但低精度的位數不可以超過高精度的。

Java中的資料型態:

基本型別:字元型(char)、數值型別(整數(位元組型byte、短整型short、整數int、長整型long)、浮點型(單精度型float、雙精度型double))、布林型(boolean(true或false))

#複合型別:類別、介面、陣列


注意下各型別儲存所佔位元組數:

  1. byte:1位元組

    short:2位元組
  2. int:4位元組

    long:8位元組
char:2位元組(Unicode編碼)

float:4位元組

double:8位元組

以上資料類型對應的儲存空間與平台無關,固定為該值。

4、常數和變數

1)常數

Java和C中整數常數定義相同,除長整數數據在其末尾加l或L外,其他類型均直接顯示數值。 C中無符號常數在其後加u或U。對於不同進制,十進制直接顯示最高位元不能有0,八進制以0開頭,十六進位以0x或0X開頭。

對於浮點型,C和Java都只能採用十進位表示。可使用小數形式和指數形式,指數形式表示時小數與指數之間以e或E分隔。注意Java中要求單精確度後要加f或F,雙精確度後要加d或D以示區分。

字元型常數都是以單引號引起來的單一字元或轉義字符串表示。特別注意,C中字符型只能表示ASCII碼從0~255的字符,Java中使用Unicode編碼2字節存儲單元可以表示特殊字符,表示unicode編碼時使用\u加4位16進製字符串。

布林類型只有Java中才有,需特別注意。

Java中常數用關鍵字final修飾,一經賦值不可更改;C中表示不可更改的關鍵字是const,其修飾的變數(注意是變量,不是常數)必須在定義時賦初值,另外用#define定義的巨集常數沒有型別。

2)變數

Java和C中變數的定義基本上相同,即:

数据类型变量名[ = 变量初值];

變數可賦初值也可不賦,但Java中長整型和浮點型數後要加上對應識別標誌(如l、f)。

特別注意:由於編譯器的不同,C申明變數要放在執行語句之前,否則可能發生編譯錯誤。

5、邏輯運算子和位元運算子

C和Java中都有的邏輯運算子&&|| 三種,意義相同,差別在於C中運算結果為0和非0,Java中只能是ture或false。 Java中還存在&、|、^(異或),&和&&、|和||的差別在於前者是非捷徑運算子而後者是捷徑運算符,即&前後都做判斷,&&前為假不做後面的判斷,|前後都做判斷,||前為真不做後面的判斷。 ^表示兩者相同為假。

C和Java中都有的位元運算子是:&|^~(取反) 8dde7a6e0f991956e2f0d9549bf3c03e>(右移),意義基本上相同。負數的右移運算在C中視不同系統有所不同(可能是算術右移也可能是邏輯右移),而Java中>>表示的是算術右移,即最高位填充符號位。 Java中邏輯右移(無符號右移)運算子是>>>,採用補碼右移,高位添0。

PS:有心的讀者可能會發現,如果你定義了一個byte或short類型的負數,如-10,採用>>>方法進行無符號右移後輸出的結果是- 5,照上面說的高位添0應該是正數。而int或long類型的就不會是負數,這是為什麼呢?我認為這是因為Java在進行>>>運算時採用的最低資料類型是int類型,導致高位資料全為1(電腦內儲存的資料是以補碼儲存的,所以負數的byte或short類型轉成int型別高位全填充1),移位時高位的最後一個1移到低位的第一位,然後截取成我們定義的資料型態(byte或short),所以我們看到的數還是負數。從這裡我們可以看出,在byte和short類型的資料做>>>運算的時候可能得不到我們想要的值,千萬注意。

6、陣列

C中陣列的定義如下:

类型说明符数组名[常量表达式];

定義可與初始化同時進行,如:int a[ 10] = {0,1,2,3,4,5,6,7,8,9};中括號內的常數可以省略。

Java中陣列定義有兩種方式:

数据类型数组名[];
//或
数据类型 []数组名;

定義和初始化可同時進行,如:int []a = {0,1,2,3,4, 5,6,7,8,9};

注意:Java中數組如果在定義時沒有進行初始化,在進行初始化的時候需要先分配內存,即:

数组名 = new 数据类型[常量表达式];

也可在定義同時進行記憶體分配:

数据类型数组名[] = new 数据类型[常量表达式];

C和Java都不支援變長數組,引用的時候都是數組名[下標]。差異是:

Java的下標範圍為0~數組長度-1,不在該範圍會拋出數組下標越界異常,而C有效範圍也是0~數組長度-1,但下標超出此界不會報錯。

多維數組中,數組元素都是按行排列的。

還有一點要注意:C中定義數組不進行初始化則數組元素值是不可預測的,而Java中分配記憶體而不進行初始化數組中是有預設值的。

7、語句

C和Java語句差別不大,主要是:

1)方法/函數呼叫時C直接呼叫函數,Java呼叫方法時方法名稱前面要加物件名稱。

2)C中兩個嵌套的複合語句同時定義同名變數是可以的,而Java不可以。

以上是java與c語法上的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn