问题1, double d = Double.valueOf("100");
这句能通过编译么?
在我的机器上不行,环境是MyEclipse 5.1.0 JDK1.5,1.6都试过,J2EE 1.4
在别人的机器上可以。
一直以来我都以为Double对象是不能直接给double赋值的。难道我一直都错了?问题2, Map对象的get,put方法。get(1)来取值是被允许的么?put(1,someObject)也是被允许的么?
总结下来,问题似乎就是基础的数值类型和对应的对象可以直接转换么?我已经糊涂了请明白人解答。万分感谢。

解决方案 »

  1.   

    double d = Double.valueOf("100");//不行Double d = Double.valueOf("100");//可以Double.valueOf() 返回的是Object
    ——————————————————————————--
    Map中的get(Object Key)
    put(Object Key,Object Value)WO我的是JDK 1.4
      

  2.   

    double d = Double.valueOf("100"); 
    是可以编译过去的  我用的是Eclipse 3.2和JDK 1.5
    好像没听说过Double对象不能直接给double赋值
      

  3.   

    因为JDK1.5做了自动转换double d = Double.valueOf("100");  
    是可以通过的,它等同于double d = Double.valueOf("100").doubleValue();
      

  4.   

    怪了,难道我和楼主的机器一样的毛病?
    我的double d = Double.valueOf("100");  就不行!Eclipse3.1 不行,
    cmd直接编译也不行
      

  5.   

    static Double § valueOf(String s) §  返回保持用参数字符串 s 表示的 double 值的 Double 对象。 
    ____________________________________________________________上面是我在1.5API 中COPY下来的。double d = Double.valueOf("100");   
    是可以通过的,它等同于double d = Double.valueOf("100").doubleValue();疑问????
    晚上回家用1.5试试!
      

  6.   

    Double.valueOf() 返回的是对象
      

  7.   

    JDK1.5有自动装箱和解包的机制所以
    double d = Double.valueOf("100");   
    是可以通过的
    但是JDK5以下的版本不可以通过的
      

  8.   

    我先回答一下 第一个问题.package bullshit;
    public class gap1{
    public static void main(String[] arg){
    Double d = Double.valueOf("100");
    System.out.print(d);
    }
    }
    我用的是Eclipse3.1..JDK1.4..输出结果为100.0valueOf
    public static Double valueOf(double d)返回表示指定的 double 值的 Double 实例。如果不需要新的 Double 实例,则通常应该优先采用此方法,而不是使用构造方法 Double(double),因为该方法很可能通过缓存经常请求的值来显著提高空间和时间性能。 
    参数:
    d - 一个 double 值。 
    返回:
    表示 d 的 Double 实例。
    从以下版本开始: 
    1.5 
    "一直以来我都以为Double对象是不能直接给double赋值的。"这句话是什么意思啊?  这个方法以及功能说了 参数是一个数值  而这个方法是返回表示这个参数Double类型的引用对象.和你这句话有点出入.
      

  9.   

    自动打包(auto-boxing)和自动解包(un-boxing)
      

  10.   

    ls 的各位 、都说了
    JDK5增加了自动打包(auto-boxing)和自动解包(un-boxing)机制在JDK5以下的版本不可以通过的
      

  11.   

    我的JDK是1.5,如果这样的话 double d = Double.valueOf("100");  
    编译不能通过
    因为public static Double valueOf(String s)
                          throws NumberFormatException
    返回的是Double对象,而double是一种数据类型,两者是不能兼容的,
    所以要想输出结果只能这样:
              Double d =Double.valueOf("100"); 
             System.out.println(d.toString());
      

  12.   

    第2题 根据JAVA编程思想书上EG:
    你可以自己试验下.
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;class A{
    int i;
    A(int i){
    i=1;
    }
    public String toString(){
    return Integer.toString(i);
    }
    }
    public class gap1{
    private static Random x=new Random();//随机数类
    public static void main(String[] args){
    Map mp3=new HashMap();//Map 不能保存基本类型,只能保存对象应用。
    for(int i=0;i<5000;i++){
    Integer y=new Integer(x.nextInt(12));
    if(mp3.containsKey(y))//containsKey 是检查 Y的键是否在容器中了。  
    ((A)mp3.get(y)).i++;
    else
    mp3.put(y,new A(i));
    }System.out.print(mp3); }
    }
    更好帮助理解第个问题.
      

  13.   

    1.答:
    5.0里重载了valueOf方法.
        public static Double valueOf(String string) throws NumberFormatException {
    return new Double(FloatingDecimal.readJavaFormatString(string)
          .doubleValue());
        }
        
        public static Double valueOf(double d) {
    return new Double(d);
        }
    可能是你的编译是按照5.0版本以下编译的.
    找到 项目 右键-->properties-->java compiler-->enable project specific settings-->compiler compliance level-->5.02.答:
    Map中的get(Object Key)
    put(Object Key,Object Value)
      

  14.   

    问题搞的越来越糟,LZ的问题问的很明白:第一个是还是不是,第二个是否允许基础的数值类型和对应的对象可以直接转换.
    回答这个就好了啊,研究那么深,只能是越来越复杂到回答不清楚!
    LZ:Double对象是可以赋值的,第二个也是允许地!不过,要注意两个转换对象的范围!
      

  15.   

    无论是第一还是第二个问题,其实都是JDK1.5上的自动封箱和拆箱问题
    double d = Double.valueOf("100"); 
    被【编译器】修改为了double d = Double.valueOf("100").doubleValue();
    java.util.Map m = ...;
    m.put(1, "");
    m.get(2);同样被【编译器】修改为了
    map.put(Integer.valueOf(1), "");
    map.get(Integer.valueOf(2));
    这两个都是JDK1.5以后的编译器所提供的新功能
      

  16.   

    1.double d = Double.valueOf("100"); 
    System.out.print(d) ;
    这个是可以通过的;
    ===================
    2.map.put(0, "aa") ;
    map.put(1, "bb") ;
    map.put(2, "cc") ;
    System.out.print(semap.get(2)) ;
    这也是允许的.
      

  17.   


    就是 编译输出 的版本 和 jre lib 版本设置的问题 
    有那么复杂吗
      

  18.   

    你试过报的错误是什么   给大家看看 我这里可以通过  是jdk1.5.0_09你问的2个问题在不同版本的编译器都是不一样的  你要确定版本 !
      

  19.   

    同意ls,1.5及以上都可以的。你说你试了1.5和1.6都不行,估计还是你自己机子上1.5jre和1.6jre的环境设置问题。估计实际上还是用的1.4编译的。
      

  20.   

    JDK版本
    也要看IDE里设置的JDK版本