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