求助 一个java基础问题

Shine_Panda 2008-09-15 09:46:39


public class Test{
public static void main(String[] args){
Integer a = 100 ;
Integer b = 100 ;

Integer a2 = 200;
Integer b2 = 200;


System.out.println (a==b);

System.out.println (a2==b2);
}
}



输出的结果是true ,false 不知道为什么
...全文
480 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
javagxc 2008-09-17
  • 打赏
  • 举报
回复
最基础的要学好,学数据类型时,要注意各个类型的取值范围。
gjjofsfe 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 ZangXT 的回复:]
关键是两段代码,一个是valueOf方法实现boxing(可以从字节码中看出来调用了这个方法)
Java code

public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}


然后是,内部类IntegerCache,缓存了Integer对象:
Java code

private static class IntegerCache {

[/Quote]

上面的是Integer的原代码,所以可以很清楚明白是什么问题,但是一般我们不会象帖主那样去定义的。
Miracle1216 2008-09-17
  • 打赏
  • 举报
回复
5楼正解!
fztjava 2008-09-17
  • 打赏
  • 举报
回复
Integer会自动缓存[-128,127]之间的Integer对象
零度阳光 2008-09-17
  • 打赏
  • 举报
回复
恩,试过了,那确实!!!长点知识了。
零度阳光 2008-09-17
  • 打赏
  • 举报
回复
没有试过,飘过~~~
_IamJ 2008-09-16
  • 打赏
  • 举报
回复
楼上的都说了
看一下源代码就更明白
iYuzh 2008-09-16
  • 打赏
  • 举报
回复
看了楼上各位的发言
的确学到不少东西

以后多来泡泡
a254939392 2008-09-16
  • 打赏
  • 举报
回复
你的 jdk版本 过低 只有 1.5之后的才能编译通过
rabbit_zizhu 2008-09-16
  • 打赏
  • 举报
回复
哦,看到楼上的,明白了,学习了
sagezk 2008-09-16
  • 打赏
  • 举报
回复
首先
public class Test {
public static void main(String[] args) {
Integer a = 100; //自动包装(或叫自动装箱)
Integer b = 100; //编译器会将其处理成 Integer b = Integer.valueOf(100);
Integer a2 = 200;
Integer b2 = 200;
System.out.println (a == b);
System.out.println (a2 == b2);
}
}

剩下的可以从 Integer.valueOf() 源代码里找到答案,如下:
	public static Integer valueOf(int i) {
final int offset = 128;
//注意下面的这个 if,如果在 -128 ~ 127 间就用缓冲的 Integer 对象的引用作返回值
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}

  • 打赏
  • 举报
回复
以前还真没注意过这个,学习了……
don2735 2008-09-16
  • 打赏
  • 举报
回复
谁能把自动装箱和拆箱说一下呢?
cwjieNo1 2008-09-16
  • 打赏
  • 举报
回复
楼上说的虽然也有道理,但是和题目不相关啊~
学习了·~
syzhwh 2008-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 galant2008 的回复:]
Integer的范围在 [-128,127]
直接赋值的Integer当值的范围的时候,
不会生成新的对象,直接把缓存中的对象拿来用

可以看看Integer的源代码 里面有实现
[/Quote]
dongqdonglin 2008-09-16
  • 打赏
  • 举报
回复
新版本新特性
lyguo 2008-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Y125348369 的回复:]
楼主你写的代码就有问题啊
Integer a = 100 ;
Integer b = 100 ;

Integer a2 = 200;
Integer b2 = 200;
都是错误的(int转化integer)


估计你是想问的是==和equals的区别吧
如String str="2";
String str1="2";

System.out.println (str==str1);//结果是true
System.out.println (str.equal(str1);//结果是true
//str 和str1指向的是同一个内存空间所以怎么比较他就是相等的



String ss=new String()…
[/Quote]
感觉他说的不错
gabriel80 2008-09-16
  • 打赏
  • 举报
回复
Integer会自动缓存[-128,127]之间的Integer对象
acrobatyuer 2008-09-16
  • 打赏
  • 举报
回复
看一下源代码....
老紫竹 2008-09-16
  • 打赏
  • 举报
回复
byte 类型的数据会被系统缓冲,也就是共享。
所以 128以内的都会这样。 你可以测试看看
127 = true
128 = false;
没啥特殊的
加载更多回复(38)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧