java與c語法上的差異是什麼?
1、識別碼:
C可用的識別碼為數字、大小寫字母、底線,不能以數字開頭;【推薦教學:C語言教學】
Java可用的識別碼除了C的三種以外,多一種美元符號($),同樣不能以數字開頭。 【推薦學習:java課程】
2、關鍵字:
C中的關鍵字有:
do double else#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
##implements import instanceof int interface
# long native new null packageprivate protected public static super switch synchronizedvoid volatile while #3、資料型態:C中的資料型別有:
##基本型別:整數型(基本整型int、短整數short[int]與長整型long [int]以及有符號型[signed]、無符號型unsigned)、字元型[signed/unsigned ]char、浮點型(單精確型float、雙精度型double和長雙精度long double)、枚舉類型 #建構型別:陣列型別、結構體型別、共用體型別
##指標型別
# int:2位元組
long:4位元組
long double:16位元組
以上儲存除char類型外,其他視系統不同略有不同,但低精度的位數不可以超過高精度的。
Java中的資料型態:基本型別:字元型(char)、數值型別(整數(位元組型byte、短整型short、整數int、長整型long)、浮點型(單精度型float、雙精度型double))、布林型(boolean(true或false))
#複合型別:類別、介面、陣列
注意下各型別儲存所佔位元組數:
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中都有的位元運算子是:&
、|
、^
、~(取反)
、<<(左移)
、>>(右移)
,意義基本上相同。負數的右移運算在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中文網其他相關文章!