我在阅读《关于软件的更多Joel》时,偶然看到Joel Spolsky说,有一种特殊类型的程序员知道Java/ c#(面向对象编程语言)中int和Integer的区别。
那么,有什么不同呢?
我在阅读《关于软件的更多Joel》时,偶然看到Joel Spolsky说,有一种特殊类型的程序员知道Java/ c#(面向对象编程语言)中int和Integer的区别。
那么,有什么不同呢?
当前回答
在Java和c#中,int和Integer是用来表示不同事物的两个不同术语。它是可以赋值给可以精确存储的变量的基本数据类型之一。每次只声明其类型的一个值。
例如:
int number = 7;
其中int是赋给值为7的变量number的数据类型。所以int型只是一个原语,不是一个对象。
而Integer是具有静态方法的基元数据类型的包装类。That可以用作需要对象的方法的参数,其中as int可以用作需要整数值的方法的参数,可用于算术表达式。
例如:
Integer number = new Integer(5);
其他回答
我只在这里发布,因为其他一些帖子在与c#相关方面略有不准确。
正确:int是System.Int32的别名。 错误:float不是System的别名。浮动,但为了系统。单
基本上,int是c#编程语言中保留的关键字,是System的别名。Int32值类型。
float和float是不一样的,因为float的正确系统类型是system . single。有一些这样的类型,其保留关键字似乎与类型名称不直接匹配。
在c#中,“int”和“System”没有区别。Int32 ",或任何其他对或关键字/系统类型,定义枚举时除外。通过枚举,您可以指定要使用的存储大小,在这种情况下,您只能使用保留关键字,而不能使用系统运行时类型名称。
int中的值是存储在堆栈中,还是存储在内存中,还是作为引用的堆对象,这取决于上下文以及如何使用它。
方法中的声明:
int i;
定义一个System类型的变量i。Int32,位于寄存器或堆栈中,这取决于优化。一个类型(结构或类)中的相同声明定义了一个成员字段。方法参数列表中的相同声明定义了一个参数,具有与局部变量相同的存储选项。(注意,如果你开始将迭代器方法混合在一起,这段话是无效的,它们完全是不同的野兽)
要获得一个堆对象,你可以使用装箱:
object o = i;
这将在堆上创建I的内容的盒装副本。在IL中,您可以直接访问堆对象上的方法,但在c#中,您需要将其转换回int类型,这将创建另一个副本。因此,在c#中不容易更改堆上的对象,除非创建一个新的int值的新盒装副本。(啊,这段话读起来可不那么容易。)
关于Java 1.5和自动装箱,在比较Integer对象时有一个重要的“怪癖”。
在Java中,值为-128到127的Integer对象是不可变的(也就是说,对于一个特定的整数值,比如23,通过程序实例化的所有值为23的Integer对象都指向完全相同的对象)。
例如,返回true:
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // true
而这返回false:
Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); // false
==通过引用进行比较(变量是否指向同一个对象)。
根据所使用的JVM的不同,这个结果可能不同,也可能没有不同。Java 1.5的规范自动装箱要求整数(-128到127)始终装入同一个包装器对象。
一个解决方案吗?当比较Integer对象时,应该总是使用Integer.equals()方法。
System.out.println(i1.equals(i2)); // true
更多信息请访问bexhuff.com
你以前编程过吗? (int)是你可以为变量设置的基本类型之一(就像char, float,…)
但是Integer是一个包装类,你可以使用它对int变量执行一些函数(例如将它转换为字符串或反之亦然,…),但请注意包装类中的方法是静态的,所以你可以随时使用它们,而无需创建Integer类的实例。 回顾一下:
int x;
Integer y;
x和y都是int类型的变量,但是y是由一个Integer类包装的,并且有几个你使用的方法,但如果你需要调用Integer包装类的一些函数,你可以简单地做到这一点。
Integer.toString(x);
但请注意,x和y都是正确的,但如果您想将它们仅作为基本类型使用,请使用简单形式(用于定义x)。
在Java和c#中,int和Integer是用来表示不同事物的两个不同术语。它是可以赋值给可以精确存储的变量的基本数据类型之一。每次只声明其类型的一个值。
例如:
int number = 7;
其中int是赋给值为7的变量number的数据类型。所以int型只是一个原语,不是一个对象。
而Integer是具有静态方法的基元数据类型的包装类。That可以用作需要对象的方法的参数,其中as int可以用作需要整数值的方法的参数,可用于算术表达式。
例如:
Integer number = new Integer(5);
在Java中,'int'类型是一个原语,而'Integer'类型是一个对象。
在c#中,'int'类型与System相同。Int32,是一个值类型(即更像java 'int')。整数(就像任何其他值类型一样)可以被装箱(“包装”)到一个对象中。
对象和原语之间的区别在某种程度上超出了这个问题的范围,但总结一下:
对象为多态性提供了便利,通过引用传递(或者更准确地说,通过值传递引用),并从堆中分配。相反,原语是按值传递的不可变类型,通常从堆栈中分配。