Java和C#的异同

1、final 关键

a.final修饰类和C#的Sealed 类似都是让类无法继

b.final修饰变量和C#的readonly类似,让其成为常量

c.final修饰方法,方法不能被重写。因为java没有override关键字,方法都是默认重写的。在使用多态的时候为了不重写,可在父类的方法中添加final关键字修饰。而C#默认是在子类中使用new关键字,隐藏本类的方法,若要使用override,则必须保证其父类是接口,或者方法有virtual或abstract修饰


2、接口

C#中不能有字段(可以使用属性代替),而且成员虽默认为public但不能使用public修饰;而java可以有字段,而且默认是 public static final 类型的( public static final 建议写下),java的成员方法默认是public abstract的。


3、java的包

java的包就是文件夹(pakage cn.jop),自动编译:javac -d .  test.java 会生成对应的文件夹,java cn.jop.test 带包运行。 包和C#的命名空间类似,一个java文件下pakage语句只能是一个,而Namespace 可以有多个


4、内部类

(1) 成员内部类(在类成员位置)

内部类的实例:外部类.内部类  instant= 外部内对象.内部类对象   ===>>> Outer.Inner  instant=new Outer().new Inner();

内部类可以使用private关键字来保障其安全性,内部类可以使用static修饰(外部类不行,但内部类是成员)。static内部类的方法可以是非静态的,但是它里面使用的字段必须是静态的,它实例==>>Outer.Inner  instant=new Outer.Inner();

(2)局部内部类(在方法里面定义的类)

a.局部类中使用方法里面的局部变量必须用final修饰,因为对象是保存在堆中,局部变量在栈中。堆在方法调用后不会立即消失,而栈中的内容却立即消失了

b.匿名局部内部类形式如下,这里面的new Inter(){} 得到的是一个实现或者继承了接口或者类的子类对象。

interface Inter{void show();}
class Outer{
	public static Inter method(){
		return new Inter(){
			public void show(){
				System.out.println("clow");
			}
		};
	}  
}
class InnerClassDemo{
	public static void main(String[] args){
		Outer.method().show();
	}
}


5.Eques和String

在C#中String类型的“==”最终也调用了Equals(),因为String重写了Eques方法让其比较字符串是否相同,判断2个对象是否是为同一对象,只有object.ReferenceEques方法可靠。

但在java的String里面’==‘比较的为地址是否相同,String亦重写了Eques方法让其比较字符串是否相同

String s1 = new String(new char[]{'1','2','3'});
String s2 = "123";   //常量池里面也有地址,若没有找到要赋值的字符串也会开辟空间,常量相加,先加再找
Console.WriteLine(s1==s2);
Console.WriteLine(s1.Equals(s2));

所以同样的代码,在C#里面结果是true true;而在java中得到却是false true

在java里面访问字符串中的字符没有str[index],只能使用s.charAt(index)

随便说下在java中object的equals方法比较的是地址,object的hashCode()函数返回的是一个对象地址哈希映射后的整数。在java中可以使用hashCode方法判断两个对象不是同一对象,但判断两对象是同一对象只有使用equal函数了。


6.size和count    C#获取集合的大小为count,而java的为size


7.可变参数,在C#使用params 修饰  如 add(params int[] array);而java使用如下的形式 add(int... array)  。 他们两的用法一样

 
 


你可能感兴趣的:(Java和C#的异同)