新工作.Net和Java都要做,早期也做过一段Java的项目,但没有系统的深入学习过。一直觉得这两门语言估计是最相近的两门语言了,好多代码可以说直接拷过来都不带报错的,但仔细推敲还是有很多的不同。
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
C#提供的类型更细一些。
Java没有基本的decimal类型,有个BigDecimal类型,是一个继承于Number类的类。
C# | Java | |
---|---|---|
布尔型 | bool | boolean |
字符型 | char | char |
整形 | byte | byte |
sbyte | ||
int | int | |
uint | ||
nuint | ||
long | long | |
unlong | ||
short | short | |
unshort | ||
浮点型 | decimal | BigDecimal* |
double | double | |
float | float |
C#提供像C语言一样的结构体(struct )类型,Java没有此类型,一般通过类实现类似功能。
二者都有枚举类型enum。
C#的枚举类型时值类型,默认情况下,枚举成员的关联常数值为类型 int;它们从零开始,并按定义文本顺序递增 1。 可以显式指定任何其他整数数值类型作为枚举类型的基础类型。
enum HttpCode : ushort { OK = 0, BadRequest= 400 }
Java的枚举类型是通过类实现的,所以可以为其添加属性和方法等。
public class Simple { enum HttpCode { OK("请求成功!", 200), BadRequest("请求失败!", 400); // 成员变量 private String message; private int code; // 构造方法 private HttpCode(String message, int code) { this.message = message; this.code = code; } // 覆盖方法 @Override public String toString() { return this.message; } } public static void main(String[] args) { System.out.println(HttpCode.BadRequest.toString()); } }
Java的枚举成员都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
上面的枚举类代码可以理解为:
public final class HttpCode extends Enum{ public static final HttpCode OK; public static final HttpCode BadRequest; }
C#7.0之后提供类元组类型。Java中JDK原生不支持元组,但有框架javatuples支持元祖。
C#为值类型提供了对应的可空值类型,例如int->int?,本质是通过结构体实现的。
Java为值类型提供了对应的包装类型,例如int->Integer,包装类型为引用类型。
二者都以Object类型作为所有类型的基类,都提供了String类(以及StringBuilder),注意首字母大小写不同。