问题3, <1>没有初始化部-有可能j与i都未定义,可能引发编译错误<2>没有停止条件-死循环问题4, 右移单位赋值 问题14,不会是这个答案吧!问题16,oxFFFFFFF1是非的表示正确应为0xFFFFFFF1或0XFFFFFFF1问题18,好像intvalue或者i并非局部变量问题36,必须牢固掌握Java语法

解决方案 »

  1.   

    which three are valid declaraction of a float? 
    A. float foo=-1; 
    B. float foo=1.0; 
    C. float foo=42e1; 
    D. float foo=2.02f; 
    E. float foo=3.03d; 
    F. float foo=0x0123; 
    答案有A D F对的就不说了,b的1.0和c的42e1还有e的3.03都是double(没有特别指出的浮点数都是double型),
      

  2.   

    下面我对几个有把握的问题说一下:
    14 which three are valid declaraction of a float? 
    A. float foo=-1; 
    B. float foo=1.0; 
    C. float foo=42e1; 
    D. float foo=2.02f; 
    E. float foo=3.03d; 
    F. float foo=0x0123; 
    为什么答案有A F啊!???? 尤其是A ????? B C 为什么不可以啊!? 
    答:
    我认为答案为:B、E.
    因为对于给一个primitive变量赋值,只要可以隐形转换就合法。如:
     float f;
     int i=10;
     f=i; //合法,隐形转换
     而:
       i=f; //不合法,不能隐形转换。
      上面的几个选项中,第一个:float foo=-1;  -1为int类型
    B. float foo=1.0;   1.0 为double类型,因为小数默认为double类型 //非法
    C. float foo=42e1;  
    D. float foo=2.02f; 
    E. float foo=3.03d;  //同B,
    F. float foo=0x0123; 
    其他几个合法,因为42e1为float,2.02f为float,0x0123 为int,只不过是16进制
     16
    public class Test{ 
      2) public static void main(String args[]){ 
      3) int i=oxFFFFFFF1; 
      4) int j=~i; 
      5) 
      6) } 
      7) } i=oxFFFFFFF1 还是int型吗! 没有越界吗!????还是long型的!?? 答:
     没有越界,int 在java中是占32位,而上说0xFFFFFFF1为32位。
              long占 64位。18. public class Test{ public static void add3(Integer i){ 
           int val=i.intvalue(); 
           val+=3; 
           i=new Integer(val); 
    } public static void main(String args[]){ 
          Integer i=new Integer(0); 
          add3(i); 
          System.out.println(i.intvalue()); 
    } } 
      what is the result? 
      A. compile fail B.print out "0" C.print out "3" 
      D.compile succeded but exception at line 3 
    为什么是 B不是C啊!?? 
    答:答案为B。
     因为在java中只有传值参数,上说的
    public static void add3(Integer i){ 
           int val=i.intvalue(); 
           val+=3; 
           i=new Integer(val); 
       } 
    中,i在传进函数add3()中被复制成另一个局部变量Integer temp;
    在函数add3()中成为了如下的形式:
    public static void add3(Integer i){ 
          //这里只是模拟编译器的大致意思
          Integer temp=i; //这个赋值语句应该在参数传到函数add3()中发生
           int val=temp.intvalue(); 
           val+=3; 
           temp=new Integer(val); 
        //函数结束,temp局部变量释放,此时,变量 i还是没变,这就是传
        //值参数的本质
       } 
    在java中只有传值参数,这是说传过来的参数的内容不能变。
    对于引用参数,也是一样。但是引用的对象的内容可变。因为参数只是引用,只是指向一个地址,这个是不变的,但是这个被引用的对象的内容可变。这类似于C中的指针参数。
    下面举个例子:
     Point  p=new Point(2,3);
     pubic static void add3(Point p)
      {
           p.x=p.x+3;
           p.y=p.y+3;
       }
      Point p1=p;
      此时:p1为点(5,6).是不是有点惊讶!!!
    下面我们也来分析一下他的本质:
    public static void add3(Point p){ 
          //这里只是模拟编译器的大致意思
          Point temp=p; //这个赋值语句应该在参数传到函数add3()中发生
           temp.x=temp.x+3;
           temp.y=temp.y+3;
          //函数结束,temp局部变量释放,此时,变量 p 的内容同样还是没变,这 
          //就是传值参数的本质
       } 
    但是,p是指向一个Point对象的引用,也就是说p是指向了一个 Point的地址,而在add3(Point p)中Point temp=p;这里也是将上面的Point的地址给了temp变量,而对temp的改变是对上面的Point对象的改变,而p也是指向该对象,所以,p 对象所引用的对象内容发生了变化。
    36. public class FooBar{ 
    public static void main(String[] args){ 
      int i=0,j=5; 
    4) tp: for(;;i++){ 
           for(;;--j) 
          if(i>j)break tp; 
         } 
    System.out.println("i="+i+",j="+j); 


    what is the result? 
    A.i=1,j=-1 B. i=0,j=-1 C.i=1,j=4 D.i=0,j=4 
    E.compile error at line 4 这种嵌套式的循环怎么做(看)比较快??答案:B。
    想快点做这样的题目,必须首先仔细看题目:
      int i=0,j=5; 
    4) tp: for(;;i++){ 
           for(;;--j) 
          if(i>j)break tp; 
         } 
    上面,我们看到两个for循环,都没有条件判断,即中间的语句被省略,
    for(;;i++),所以如果在内循环中没有if(i>j)break tp;则永远是死循环。所以,第一的循环执行一遍,然后执行内循环,而内循环没有判断条件,所以一直运行,直到,i>j退出,而此时i始终没有改变,所以,i=0;j=-1.
      

  3.   

    对不起,第14题上我犯了二个错误,
    1.没看清题目,他是叫我们选赋值正确的,而我误认为是选错误的赋值语句
    2. 42e1我起初认为float,我是看书中没有明确说它 是double类型,造成我得误解,然后,我通过一个小程序测试一下,发现它也是double类型。第14题,答案为:A 、D、F。
    上面的几个选项中,第一个:float foo=-1;  -1为int类型
    B. float foo=1.0;   1.0 为double类型,因为小数默认为double类型 //非法
    C. float foo=42e1;  42e1也为double类型。
    D. float foo=2.02f; 
    E. float foo=3.03d;  //同B,
    F. float foo=0x0123; 
      

  4.   

    1 关于String 的实例对象是否必须先显示初始化,否则不能使用,也就是说不能默认初始化???? String的默认值是null. 但String[]却不必显示初始化 默认值是null. 
    答:String是一个类,下面所说的原则对所有类实例变量都适用。变量可以默认初始化,但必须在类里,在方法里定义的变量不能进行默认初始化。