A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

黑马涂冰冰

黑马帝

  • 黑马币:0

  • 帖子:8

  • 精华:0

© 黑马涂冰冰 黑马帝   /  2012-4-5 22:25  /  2395 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天发现了一个比较有趣的问题,具体如下:
  1. package bing;

  2. /**
  3. * @author bing
  4. * 关于int、Integer地址比较
  5. */
  6. public class IntAndInteger {
  7.    
  8.         static int out = 1000 ;
  9.        
  10.         public static void main(String[] args) {

  11.                 int inner1 = 1000 ;
  12.                 int inner2 = 1000 ;
  13.                
  14.                 Integer inner3 = 1000 ;
  15.                 Integer inner4 = 1000 ;
  16.                
  17.                 Integer inner5 = 100 ;
  18.                 Integer inner6 = 100 ;
  19.                
  20.                 System.out.println(out==inner1); //true
  21.                
  22.                 System.out.println(inner1==inner2); //true
  23.                
  24.                 System.out.println(inner1==inner3); //true
  25.                
  26.                 System.out.println(inner3==inner4); //false
  27.                
  28.                 System.out.println(inner5==inner6); //true
  29.                
  30.         }

  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

11 个回复

正序浏览
方江 发表于 2012-4-6 17:20
冰姐碉堡了。冰姐求合体~~我发现我自己答的都不知道是啥了。

哈哈,我不喜欢男淫......
回复 使用道具 举报
黑马涂冰冰 发表于 2012-4-6 01:26
这个帖子主要关于三方面的知识:
1、常量池
2、你提到的......

:lol冰姐碉堡了。冰姐求合体~~我发现我自己答的都不知道是啥了。
回复 使用道具 举报
方江 发表于 2012-4-6 01:17
貌似视频中是这样说的,JDK在1。几升级后出现了这样的新特状,当你创建的值在—127~128之间时,他不会再去 ...

这个帖子主要关于三方面的知识:
1、常量池
2、你提到的......
3、自动装箱和拆箱
回复 使用道具 举报
貌似视频中是这样说的,JDK在1。几升级后出现了这样的新特状,当你创建的值在—127~128之间时,他不会再去创建新的地址值。而是直接指向了这个地址。所以==的时候为turn.当你创建出的值超过这个范围时,他就会自己创建新的了,所以为flase
嘎嘎。貌似13天或者14天的视频里面有写。
回复 使用道具 举报
这样可以达到一定的节省内存的功能。
回复 使用道具 举报
这样可以达到一定的节省内存的功能。
回复 使用道具 举报
foxpeter 发表于 2012-4-5 23:26
System.out.println(inner5==inner6); //true

相等是因为Integer采用了享元设计模式 好像值在-127-128之间 ...

嗯,包装类好像都运用了这种模式
回复 使用道具 举报
niceBoy 发表于 2012-4-5 23:02
???这是基本数据类型,==是比较值吧,在比较对象的时候==才是比较地址吧 ...

指向的是常量池,说法不一样而已
回复 使用道具 举报
System.out.println(inner5==inner6); //true

相等是因为Integer采用了享元设计模式 好像值在-127-128之间的Integer都会只有一个对象。
这样可以达到一定的节省内存的功能。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
楼主说得对
回复 使用道具 举报
???这是基本数据类型,==是比较值吧,在比较对象的时候==才是比较地址吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马