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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-1-28 01:29  /  1030 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-29 12:03 编辑

毕老师视频中有一个获取字符出现的次数的代码,有一处不明白,请哪位高手指点:
public static String charCount(String str)
{
     char[] ch=str.toCharArray();
     TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
     int count=0;
     for(int x=0;x<ch.length;x++)
     {
           if(!(ch[x]>='a'&&ch[x]<='z'||ch[x]>='A'&&ch[x]<='Z'))
         {
              continue;
              Integer value=tm.get(ch[x])
              if(!(value==null))
                  count=value;     //count是int型变量,而value是Integer型,怎么能把value赋给count呢?
              count++;
              tm.put(ch[x],count);//集合中存入的都是对象,但count是int型,不是对象,怎么能存呢?
             count=0;
            
         }
      }
}
如果不同数据类型的变量之间可以赋值,那是怎么转换的?

评分

参与人数 1黑马币 +3 收起 理由
Rancho_Gump + 3

查看全部评分

3 个回复

正序浏览
这里用到了java的自动装箱机制。

java中的8种基本数据类型都有与之对应的封装类(封装类就是所谓的箱)。分别是:

byte short int long double float char bool
Byte Short Integer Long Double Float Character Boolean

装箱就是把基本数据类型封装到箱子里(封装成与之对应的封装类而成为一个实例),拆箱就是把一个实例从箱子里拿出来。

在JDK5.0之前
  1. Integer a = 1;
复制代码
如果这样写是错误的(类型转换错误)。然而现在JVM会自动做一些必要的操作,使得上面的不用new关键字实例化Integer对象而是直接赋上一个常数的操作合理。好比把一件东西装到一个箱子里(封装类的对象),这就是自动装箱。反之:
  1. Integer b = new Integer(1);
  2. int c = b;
复制代码
把一个Integer的对象b直接赋值给int变量c,JVM默认会取出b的值赋给c,就好像从箱子里拿出一件东西给了谁谁谁,这就是自动拆箱。

装箱操作默认调用的是Integer的静态方法valueOf,拆箱操作默认调用的是Integer的intValue方法。下面是jdk1.6.0_10文档中Integer类的源码:
  1. public static Integer valueOf(int i) {
  2. final int offset = 128;
  3. if (i >= -128 && i <= 127) { // must cache
  4. return IntegerCache.cache[i + offset];
  5. }
  6. return new Integer(i);
  7. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
JDK1.5新特性,自动装箱与拆箱。当将一个包装类型的值赋值给基本类型时,会自动拆箱。反之,会自动装箱。

评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6

查看全部评分

回复 使用道具 举报
在这里用到了基本数据类型的的包装类,
基本数据类型   引用数据类型
int                  Integer
char               Charter
等有八种,只有这两种的写法特殊,所以列举出来了
他们使用的时候有一个自动拆箱和装箱的过程
例如:Integer i =new Integer();//感觉此写法太麻烦所以就改进了
Integer i = 4;//之中有个自动装箱的过程,所以可以赋值
(毕老师的视频中有的讲的哦,要仔细看看啊 !加油啊  )
希望帮到你啊 加油

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马