黑马程序员技术交流社区
标题:
int与Integer比较?
[打印本页]
作者:
王鹏伟
时间:
2013-2-26 14:33
标题:
int与Integer比较?
public class Demo0 {
public static void main(String[] args) {
int x = 1;
int a = new Integer(1);
Integer y = new Integer(1);
Integer z = 1;
System.out.println(x==y);
System.out.println(y==z);
System.out.println(x==z);
System.out.println(x==a);
System.out.println(y==a);
}
}
复制代码
为什么输出结果是:int与Integer有什么区别?
true
false
true
true
true
作者:
陈圳
时间:
2013-2-26 14:39
int是一个基本数据类型,
Integer是一个基本数据类型封装类,
int i=0;//0是数值
Integer i=0;0是对象
第一个是false是因为比较的是对象地址.equals比较的是对象内容.
哎版主恨透了这类问题...因为换汤不换药的帖太多了...
作者:
黑马刘杰
时间:
2013-2-26 14:41
int是基本数据类型,Integer是整形对象。
int x=1;这里x是基本数据类型,Integer y=1,这里y是整形对象。
当x与y想比较时,y自动拆箱为基本类型,所以输出true。
而 Integer y = new Integer(1);和 Integer z = 1; 是两个对象,y指向的内存地址与z指向的内存地址不同,只是两个地址中保存的值都是1.
作者:
Benwolf0818
时间:
2013-2-27 15:49
Integer是int的封装对象,两个对象==比较的是栈的值
Integer a = new Integer(1);
Integer b = new Integer(1);
a与b存的是Integer的堆中的地址,而不是值
a、b指向堆中的地址显然不同所以 a==b 为false
int c = 1; int为值类型,引用类型Integer与值类型int比较显然比较的是值
因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值
所以a==c比较的是他们各自的value, a==c为true
Integer e=1; 这个比较特殊,直接赋值 它有独立的内存,每次赋值时将检查内存中是否有值跟他匹配的,若有则把此内存地址付给e,若没有,开辟新的内存
你可以尝试下面的例子:
Integer t = 1;
Integer t1 = 1;
t==t1 为true,如上所说,此时t与t1指向的是同一块内存
new 一定是开辟新的内存,直接赋值则不一定开辟新的内存
因为a的引用指向堆,而e指向专门存放他的内存,所以他们的内存地址不一样
所以a==e为false
c==e等同于 a==c,一个引用类型一个值类型
作者:
黑马刘杰
时间:
2013-2-27 19:00
我上面没有说明白,在补充一下
Integer x=1;
Integer y=1;
因为x和y的值都小于等于127,所以Java中提供了一种享元模式,x和y指向同一个对象。
Integer z=new Integer(1); z是新建立一个对象,与x,y所指向的对象不一样。
作者:
王昕
时间:
2013-2-27 22:32
Java 5.0以后加入了auto-boxing。
之前是不能这么写Integer z = 1;,之前只能Integer z = new Integer(1);
现在自动帮你把前一种改成后一种,反过来有自动拆箱。从源代码看好像赋值的不是一种类型,类型不兼容,实际上有自动装箱和拆箱。
作者:
洪建超
时间:
2013-2-27 23:15
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类
boolean -->Boolean
char --->Character
byte -->Byte
short -->Short
int -->Integer
long -->Long
float -->Float
double -->Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性,这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。
因为封装类型是对象,所以可以进行相应的很多对象能力函数操作,这样就可以提供很多基本类型难以完成的工作的完成和实现。
你可以通过以下方式来声明该类型。
int 和 Integer 问题
java提供两种不同类型:简单类型和引用类型
int是java的简单类型,Integer是 java为int 提供的封装类(wrapper)。
java为每个简单类型提供了封装类:
boolean-Boolean byte-Byte short-Short char-Char
long-Long float-Float int-Integer double-Double
引用类型和简单类型行为完全不同,并且它们具有不同的语义。
引用类型和简单类型具有不同的特征和用法,这包括大小和速度问题。
引用类型和简单类型有不同的默认值:引用类型默认值为null,简单类型的默认值于本身的类型有关。基本数据类型本身就是一个值
主题:(int)与Integer.parseInt()的区别是什么?
(int)是强制类型转换,比如double,float转int时就必须强制转换,由精度高到精度低嘛。
Integer.parseInt(),是把字符窜类型转换成整形,比如,String a="123";int b=Integer.parseInt(a);
我的理解也是这样的,Integer.parseInt()处理的是对象级别的,而(int)处理的是简单类型
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2