本帖最后由 whithorse 于 2014-06-27 11:37:03 编辑

解决方案 »

  1.   

    Integer 是一个类  int 是一个类型 
    一个是 Integer test 
    一个是  AClass a 
    你让 test = a  明显不行嘛
      

  2.   


    麻烦认真点,看版本四,int是可以自动转换为Integer的,这是java的自动转换机制
      

  3.   

    遇到包装类型的计算操作,三目运算符会自己进行拆箱操作
    Java自动装/拆箱下,三目运算符的潜规则 
      

  4.   

    不管getA()是返回Integer还是int, 当map.get("d")== null ? a.getA() : 3 ;是表达式的结果一定是个int类型,这在编译器就已经确定了, 这就是为什么会跑nullPointerException,而不是编译不通过。而map.get("d")== null ? null : 3 ; 的返回确实Integer类型。记住,三目运算中第二个和第三个表达式一定返回相同类型。你这里无外乎是自动装箱拆箱的问题,其实不用过分纠结。
      

  5.   

    可用.
     
    import java.util.HashMap;
    import java.util.Map;class AClass {
         
        private Integer a;
        
        private int numb;
        
        
        public void setNumb(int numb)
        {
          this.numb=numb;
        }
        
        public int getNumb()
        {
         return numb;
        }
        
     
        public Integer getA() {
            return a;
        }
     
        public void setA(Integer a) {
            this.a = a;
        }
     
    }
       
    public class NumberTest {
         
        public static void main(String[] args) {
            Map<String, Object> map = new HashMap<String, Object>();
            AClass a = new AClass();
            a.setA(40);//在这里设置值,当你去取的时候就不会是空的了.
            a.setNumb('a');//
            /*
              当你用Integer来接收三目运算的值时,你就只能返回int或Integer或者能隐式转换为int(Integer)类型的值.
             */
            Integer test = (map.get("d")!= null) ? a.getA() : 'a';
            System.out.println(test);
        }
         
    }
      

  6.   


    你可能理解错了我的意思,我知道你这样可用,我问的是为什么直接赋值为null就可以,但是用三目运算符中的对象来get却不行,不过谢谢你的回答,三楼和五楼已经解答了,我用反编译工具看了class文件,确实如那篇博文所说