c#和Java在数据类型上有什么区别?
1个回答
展开全部
Java和C#语言都有原始数据类型的概念,C#/.NET语言中支持的原始数据都是值类型。但C#比java支持更多的原始数据类型,比如整型和十进制浮点数,尤其是java缺少无符号的BYTE类型,而C#的BYTE类型默认是无符号的。在两种语言中string其值都是不可改变的一个类,但是特殊的是C#为其提供了特殊的构造方法,同时C#还可以像值类型一样的使用string的值就而不需要进行拆箱操作。 既允许自动装箱和拆箱,把它们从对象类型转换为原始数据。实际上,这使得原始类型成为对象类型的子类型。在C#中这也意味着,原始类型可以定义方法,如覆盖的对象的ToString()的方法。在Java中,单独的原始包装类提供这种功能。在Java中原始值不含隐式装箱和一个显示的类型转换都需要一个实例称为原始值的((Integer)42).toString()而不是C#中调用实例 42.ToString()。另一个不同之处在于,java使大量使用装箱类型,这样可以让一个隐式拆箱转换(在C #这需要一个类型转换)。由于这些隐性拆箱转换可能会抛出空指针例外,现代集成开发环境和编译器可以配置为突出它们。 值类型 C#允许程序员用关键字struct创建用户自定义的值类型(value type)。 从程序员的角度来讲,它们可以被看做轻量级的类。
不同于一般类,而像标准基本类,这种值类型被分配在栈内存(stack)而不是堆内存(heap)。 结构体通常有一系列的限制,因为结构体没有空值的概念并且可以在数组中无需初始化而直接使用,这种类型也有必须用0来初始化内存空间的默认构造函数。 程序员只能定义另外的带有一个或多个参数的构造函数。
这也意味着结构体缺少一个虚方法表,正因为这样,它们不允许继承。
不同于一般类,而像标准基本类,这种值类型被分配在栈内存(stack)而不是堆内存(heap)。 结构体通常有一系列的限制,因为结构体没有空值的概念并且可以在数组中无需初始化而直接使用,这种类型也有必须用0来初始化内存空间的默认构造函数。 程序员只能定义另外的带有一个或多个参数的构造函数。
这也意味着结构体缺少一个虚方法表,正因为这样,它们不允许继承。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询