我在阅读《关于软件的更多Joel》时,偶然看到Joel Spolsky说,有一种特殊类型的程序员知道Java/ c#(面向对象编程语言)中int和Integer的区别。

那么,有什么不同呢?


当前回答

在Java中,'int'类型是一个原语,而'Integer'类型是一个对象。

在c#中,'int'类型与System相同。Int32,是一个值类型(即更像java 'int')。整数(就像任何其他值类型一样)可以被装箱(“包装”)到一个对象中。


对象和原语之间的区别在某种程度上超出了这个问题的范围,但总结一下:

对象为多态性提供了便利,通过引用传递(或者更准确地说,通过值传递引用),并从堆中分配。相反,原语是按值传递的不可变类型,通常从堆栈中分配。

其他回答

使用包装类的原因有很多:

我们得到了额外的行为(例如,我们可以使用方法) 我们可以存储空值,而在原语中则不能 集合支持存储对象,而不支持存储原语。

在这两种语言(Java和c#)中,int是4字节有符号整数。

与Java不同,c#同时提供有符号整数值和无符号整数值。由于Java和c#是面向对象的,这些语言中的一些操作并不直接映射到运行时提供的指令,因此需要将其定义为某种类型的对象的一部分。

c#提供了System。Int32,它是一个值类型,使用属于堆上引用类型的内存的一部分。

java提供了java.lang. integer,它是对int操作的引用类型。Integer中的方法不能直接编译为运行时指令。因此,我们将一个int值框起来,将其转换为Integer的实例,并使用某些类型的实例的方法(如toString(), parseInt(), valueOf()等)。

在c#中,变量int是指System.Int32。内存中的任何4字节值都可以被解释为原始int,可以由System.Int32的实例操作。int是system。int32的别名。当使用int.Parse(), int.ToString()等与整数相关的方法时。整数被编译成整柜系统。Int32结构调用Int32. parse (), Int32. tostring()等方法。

Java已经回答了这个问题,下面是c#的答案:

“Integer”在c#中不是一个有效的类型名称,“int”只是System.Int32的别名。此外,与Java(或c++)不同,c#中没有任何特殊的基本类型,c#中类型的每个实例(包括int)都是一个对象。下面是一些演示代码:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}

int在库函数c#中是预定义的,但在java中我们可以创建Integer对象

Int是基本数据类型。 Integer是一个包装器类。它可以将int型数据存储为对象。