1、long類型
Java
long類型,若賦值大於int型的最大值,或小於int型的最小值,則需要在數字后加L或者l,表示該數值為長整數,如long num=2147483650L。
舉例如下:
public static void main(String[] args) { /* * 對於long類型,若賦值大於int型的最大值,或小於int型的最小值, 則需要在數字后加L或者l,表示該數值為長整數 */
// 1、定義普通long類型數據
long longnum1 = 123; // 2、此句會報錯,因為int型的最大值為2147483647 //long longnum2 = 2147483650; // 3、正確定義為
long longnum3=2147483650L; System.out.println(longnum3); }
運行結果如下,第二句會報錯為:
C#
舉例如下:
public static void TestMethod() { long longnum3 = 2147483650; Console.WriteLine(longnum3); }
C#下可以直接定義long類型變量並輸出。
2、foreach語句差異
Java
舉例如下:
public static void main(String[] args) { /* * foreach語句差異 */
int arr[] = { 1, 2, 3, 4, 5 }; for (int x : arr) { System.out.println(x); } }
C#
舉例如下:
public static void TestMethod() { List<int> tempList = new List<int>() { 1, 2, 3, 4, 5 }; foreach (var item in tempList) { Console.WriteLine(item); } }
3、定義不定長參數
Java
格式為:參數數據類型...參數名稱 例如:int...a
舉例如下:
public static void main(String[] args) { // 定義不定長參數: 參數數據類型...參數名稱 例如:int...a
System.out.println("求和結果為" + add(1, 2, 3, 4, 5)); } public static int add(int... a) { int s = 0; for (int i = 0; i < a.length; i++) { s += a[i]; } return s; }
C#
舉例如下:
public static void TestMethod(params int[] paras) { int sumResult = 0; for (int i = 0; i < paras.Length; i++) { sumResult += paras[i]; } Console.WriteLine(sumResult); }
4、常量
Java
定義為final的數據無論是常量、對象引用還是數組,都不能被改變。
一個被定義為final的對象引用只能指向唯一一個對象,不可以將它再指向其他對象,但是一個對象本身的值卻是可以改變的。
那么為了使一個常量真正做到不可修改,可以將常量聲明為static final。
在Java中定義全局常量,通常使用public static final 修飾,這樣的常量只能在定義時被賦值。
舉例如下:
private static Random rand = new Random();// 實例化一個Random類對象 // 隨機產生0~10之間的隨機數賦予定義為final的a1
private final int a1 = rand.nextInt(10); // 隨機產生0~10之間的隨機數賦予定義為static final的a2
private static final int a2 = rand.nextInt(10); public static void main(String[] args) { Demo4 testObj1 = new Demo4(); // 實例化一個對象 // 調用定義為final的a1
System.out.println("調用a1的值為:" + testObj1.a1); // 調用定義為static final的a2
System.out.println("調用a2的值為:" + testObj1.a2); // 實例化另外一個對象
Demo4 testObj2 = new Demo4(); System.out.println("調用a1的值為:" + testObj2.a1); System.out.println("調用a2的值為:" + testObj2.a2); }
運行結果如下:
可以看出,定義為final的常量不是恆定不變的,將隨機數賦予定義為final的常量,可以做到每次運行程序時改變a1的值。但是a2與a1不同,由於它被聲明為static final形式,所以在內存中為a2開辟了一個恆定不變的區域,當再次實例化一個Demo4對象時,仍然指向a2這塊內存區域,所以a2的值保持不變。a2是在裝載時被初始化,而不是每次創建新對象時都被初始化;而a1會在重新實例化對象時被更改。
C#
舉例如下:
public const int CONST_TEST_ONE = 1; public static void TestMethod() { Console.WriteLine(CONST_TEST_ONE); }
5、this關鍵字
共性:
(1)this關鍵字代表本類對象的引用,可以調用類的成員變量和成員方法;
(2)this可以作為方法的返回值;
Java
舉例如下:
import static java.lang.System.out; public class thisDemo { private String studentName; public String getStduentName() { return this.studentName; } public thisDemo(String name) { this.studentName = name; } public thisDemo GetObject() { return this; } public static void main(String[] args) { thisDemo thisObj = new thisDemo("terry"); thisDemo currentObj= thisObj.GetObject(); out.println(currentObj.studentName); } }
運行結果如下:
C#
舉例如下:
public class ThisDemo { public string StduentName { get; } public ThisDemo(string name) { StduentName = name; } public ThisDemo GetObject() { return this; } }
static void Main(string[] args) { SyntaxDesc.ThisDemo thisObj = new SyntaxDesc.ThisDemo("terry"); var currentObj= thisObj.GetObject(); Console.WriteLine(currentObj.StduentName); Console.ReadKey(); }
運行結果如下:
從兩例可以看出,我實例化了一個對象,並傳遞了學生姓名(StudentName)值,隨后通過調用GetObject獲得this對象。根據打印的結果可以看出,this引用的就是本類當前的對象。
差異:
(1)Java中,this可以調用類中的構造方法。但使用這種方式需要注意的是只可以在構造方法的第一句使用this調用另外的構造方法。
Java
舉例如下:
public class ThisDemoTwo { public ThisDemoTwo() { this("terry_test"); System.out.println("無參構造方法"); } // 定義有參構造方法 public ThisDemoTwo(String name) { System.out.println("有參構造方法" + name); } public static void main(String[] args) { ThisDemoTwo obj=new ThisDemoTwo(); } }
運行結果如下:
C#
不可以
6、導入API類庫
(1)導入包(導入命名空間)
Java
語法如下:
import關鍵字的語法如下:
import com.terrydemo.*; //指定com.terrydemo包中的所有類在程序中都可以使用
import com.terrydemo.Math; //指定com.terrydemo包中的Math類在程序中可以使用
在使用import關鍵字時,可以指定類的完整描述,如果為了使用包中更多的類,可以在使用import關鍵字指定時在包指定后加上*,這表示可以在程序中使用包中的所有類。
注意:當使用import指定了一個包中的所有類時,並不會指定這個包的子包中的類,如果用到這個包中的子類,需要再次對子包作單獨引用。
C#
語法如下:
using System.Text;
using System.Threading.Tasks;
(2)導入靜態成員
Java
語法如下:
使用import導入靜態成員的語法如下:
import static 靜態成員
舉例如下:
package syntaxdesc; import static java.lang.Math.max; //導入靜態成員方法 import static java.lang.System.out;//導入靜態成員變量 public class ImportTest { public static void main(String[] args) { //在主方法中可以直接使用這些靜態成員 out.println("1和4的較大值為:"+max(1,4)); } }
C#
語法如下:
在C#6.0之前是無法實現的,在C#6.0中新增了相關語法,如下:
using static 靜態類命名空間
舉例如下:
using static System.Math; namespace JavaVSNet.SyntaxDesc { public class UsingTest { public int X { get; } = 2; public int Y { get; set; } = 1; public int GetMax { get { return Max(X, Y); } } } }
Code
JavaCode-->JavaVSNet/syntaxdesc
C#Code-->JavaVSNet/SyntaxDesc