黑马程序员技术交流社区

标题: 关于代码的问题 [打印本页]

作者: 学习代码    时间: 2014-3-25 22:50
标题: 关于代码的问题
  1. import java.util.*;


  2. class  TestDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 show("abcdefbadc");

  7.         }
  8.         public static String show(String st)
  9.         {                char[] arr= st.toCharArray();
  10.                 Map<Character,Integer> mp = new HashMap<Character,Integer>();
  11.                
  12.                         for (int x = 0;x<arr.length ;x++ )
  13.                         {
  14.                                 Integer value = mp.get(arr[x]);
  15.                                 if(value==null)
  16.                                 {
  17.                                         mp.put(arr[x],1);
  18.                                 }
  19.                                 else
  20.                                 {        value = value+1;//这个地方写成 value = value++;为什么就不可以呢
  21.                                         mp.put(arr[x],value);
  22.                                                
  23.                                 }
  24.                         }

  25.                         System.out.println(mp);
  26.                         return null;
  27.         }


  28. }
复制代码

作者: awkflf11    时间: 2014-3-25 22:57
好长代码
作者: 学习代码    时间: 2014-3-25 23:09
恩   谢谢  兄弟   但是我按照后面 那样写的话  出来的结果是,错误的
作者: 学习代码    时间: 2014-3-25 23:11
刚刚  我弄错了   谢谢  这下这个问题 算是解决了  谢谢
作者: 枫儿    时间: 2014-3-25 23:20
本帖最后由 枫儿 于 2014-3-25 23:24 编辑

    java的编译器在遇到value++value - -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是int x = 0; x=value++的情况:



  value的原始值存放在后开辟的内存中,最后这个值将赋值给x,这样x=value++后,x就会得到value的值,而value又将自加,所以,在释放内存之后,原来存放xvalue的地方将得到值将是:x(此时的值等于初始value)value(value自加后的值)。  明白了上面的问题,让我们接下来看看value=value++的情况:



     所以这样最后一次循环内的结果仍旧是value

  而C语言中的value=value++就只是完成value++的内容,所以结论会不同。这种情况说明javac的处理语法的机制不同,如果在程序中只输入value++就不会出现这个方面的问题,所在以后的程序中如果使用到value=value++的时候要格外小心,一般只需要用value++就不会有问题了。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2