整理的部分Java和C#不同点
2015-05-17 21:18
190 查看
C#有统一的类型系统,所有的类型包括原始类型(int,bool,short,long等类型)都继承于Object类。
Java略不同,它的原始类型不是继承于Object,每个原始类型都有对应的包裹类(继承于Object),比如int的包裹类Integer
C#有无符号整数,uint、ulong、ushort
Java没有
C#没有高精度的decimal。
Java中有BigDecimal
C#支持复数。Complex 结构
Java中没有
C#中有值类型。通过使用strutct关键字,可以定义结构体,这种类型在传递的时候,是按值传递,而不是按引用传递。
Java中只有原始类型。
C#中有可空类型,Nullable。
Java中只有包裹类。
C#中允许有指针。
Java中无指针。
C#中,枚举类型继承于Enum类型,是值类型的一个派生物。
Java中,枚举类型是一个class,它的值类的一个实例。
C#中有委托
Java中没有
C#中有延迟绑定的类型,dynamic
Java中没有
C#和Java中都有强引用和弱引用。
但是Java中还有一种软引用和虚引用Phantom reference。
软引用和弱引用类似,对象都是可达的,但仍然被GC回收。不同点在于,弱引用只要GC开始,就会被回收,而软引用只用当JVM内存空间不足的时候才会被回收。
虚引用的get方法永远返回null,可以用虚引用来引用我们感兴趣的对象,在GC回收的时候,会把该对象加到referenceQueue中。通过观察referenceQueue,可以知道对象是否被回收了。(此时我们可以在gc回收之前做一些其他事情,比如记录些日志什么的)
C#中支持二维矩形数组,单数组 int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };或者 int[,] a = { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };
Java中不支持,只支持数组的数组。
C#中装箱操作时候隐式的,拆箱操作时显式的。
Java中装箱拆箱都是隐式的。
C#中 成员变量修饰符 public, internal, protected, private, protected internal
Java中 public, package, protected, private
C#类中,继承的方法,默认为new,必须显示override才表示覆盖。
Java中默认表示覆盖。
C#中的内部类都是类级别的,可以随时在外部实例化。
Java中内部类必须是static的才是类级别的,才能在外部被实例化。
C#支持分部类
Java不支持
C#中,枚举类型不能实现接口。
Java支持枚举类型实现接口。
C#支持运算符重载
Java不支持。
C#方法支持out,ref引用参数
Java不支持。
C#不支持常量参数
Java支持,final。标记final的参数,在方法中不能被修改。
public short getValue(final short index) {
if (index < values.length) {
index++; //出错,index的值无法修改.
return values[index];
}
else return -1;
}
C#支持命名参数,可选参数,分部方法,条件方法
Java不支持。
C#的泛型在运行时都是一个新的类型。
Java的泛型为伪泛型,在运行时被擦除。
Java略不同,它的原始类型不是继承于Object,每个原始类型都有对应的包裹类(继承于Object),比如int的包裹类Integer
C#有无符号整数,uint、ulong、ushort
Java没有
C#没有高精度的decimal。
Java中有BigDecimal
C#支持复数。Complex 结构
Java中没有
C#中有值类型。通过使用strutct关键字,可以定义结构体,这种类型在传递的时候,是按值传递,而不是按引用传递。
Java中只有原始类型。
C#中有可空类型,Nullable。
Java中只有包裹类。
C#中允许有指针。
Java中无指针。
C#中,枚举类型继承于Enum类型,是值类型的一个派生物。
Java中,枚举类型是一个class,它的值类的一个实例。
C#中有委托
Java中没有
C#中有延迟绑定的类型,dynamic
Java中没有
C#和Java中都有强引用和弱引用。
但是Java中还有一种软引用和虚引用Phantom reference。
软引用和弱引用类似,对象都是可达的,但仍然被GC回收。不同点在于,弱引用只要GC开始,就会被回收,而软引用只用当JVM内存空间不足的时候才会被回收。
虚引用的get方法永远返回null,可以用虚引用来引用我们感兴趣的对象,在GC回收的时候,会把该对象加到referenceQueue中。通过观察referenceQueue,可以知道对象是否被回收了。(此时我们可以在gc回收之前做一些其他事情,比如记录些日志什么的)
C#中支持二维矩形数组,单数组 int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };或者 int[,] a = { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };
Java中不支持,只支持数组的数组。
C#中装箱操作时候隐式的,拆箱操作时显式的。
Java中装箱拆箱都是隐式的。
C#中 成员变量修饰符 public, internal, protected, private, protected internal
Java中 public, package, protected, private
C#类中,继承的方法,默认为new,必须显示override才表示覆盖。
Java中默认表示覆盖。
C#中的内部类都是类级别的,可以随时在外部实例化。
Java中内部类必须是static的才是类级别的,才能在外部被实例化。
C#支持分部类
Java不支持
C#中,枚举类型不能实现接口。
Java支持枚举类型实现接口。
C#支持运算符重载
Java不支持。
C#方法支持out,ref引用参数
Java不支持。
C#不支持常量参数
Java支持,final。标记final的参数,在方法中不能被修改。
public short getValue(final short index) {
if (index < values.length) {
index++; //出错,index的值无法修改.
return values[index];
}
else return -1;
}
C#支持命名参数,可选参数,分部方法,条件方法
Java不支持。
C#的泛型在运行时都是一个新的类型。
Java的泛型为伪泛型,在运行时被擦除。
相关文章推荐
- java基础-java与c#接口不同点
- BAT大厂Android面试题Java部分问题和答案整理(一)
- C# 与 Java 的不同点总结(持续追加中)
- java和c#语言上的一个不同之处
- C#做AO开发部分问题整理
- C#和JAVA的相同点和不同点
- C/C++/Java/C#/Python的内存管理机制整理
- C#和JAVA中Ticks的不同含义
- 相同中的不同:Java程序员应该停止低看C#
- 相同中的不同:Java程序员应该停止低看C#
- c#设计真的跟java有很大不同
- Java Spring中同时访问多种不同数据库(代码整理)
- C#和JAVA的相同点和不同点
- 结合本人学习,总结一些C#和JAVA的不同这处
- c#和Java有什么不同?
- C# 打印PDF文件之使用不同打印机打印所有页面或部分页面
- C#和Java的最大不同
- C#和Java中的一些不同
- 2010最新整理java笔试题之线程 同步、JSP部分
- Java网络编程---I/O部分学习笔记整理