Which three are valid declarations of a float? (Choose Three)   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;   Answer: A, D, F
每个答案都不清楚,晕死,麻烦讲解下
public class Test {
public static void main(String[] args) {

StringBuffer a = new StringBuffer ("a");
StringBuffer b = new StringBuffer ("b");
operater(a,b);
System.out.println("~~"+a);// ab
System.out.println("~~"+b);//b             。不是ab吗


}
[code=Java]
public static void operater(StringBuffer x,StringBuffer y)

{
  x.append(y);
  System.out.println(x);//ab
  y=x;
  System.out.println(y);//ab
}

}
[/code]
Java判断一个正整数是不是2的乘方。后来在网上看见二个算法
if( n&(n-1)==0 ){ 
   return true; 
}else{ 
   return false; 

 int number = 1; 
    String string = Integer.toBinaryString(number); 
    if (string.matches("10*")) { 
      System.out.println("true"); 
    } else { 
      System.out.println("false"); 
    } 这二个算法看不懂,麻烦讲下,还有这个是怎么想起的?

解决方案 »

  1.   

    上面算法太麻烦了,我写了个,很好懂
    public static void main(String args[]){
    Scanner read=new Scanner(System.in);
    int x=read.nextInt();
            int n=2,c=1;
            while(n<x){
            n=n*2;
            c++;
    }
      if(x==n)
       System.out.println(x+"是2的"+c+"次方");  第二题我也不太懂,String和StringBuffer的区别,哪个是传值,哪个是传地址,求高手解答  
      

  2.   


    int number = 1; 
        String string = Integer.toBinaryString(number); 
        if (string.matches("10*")) { 
          System.out.println("true"); 
        } else { 
          System.out.println("false"); 
        } // String string = Integer.toBinaryString(number); 返回一个二进制整数
    // string.matches("10*") 上面所得与正则表达式匹配 判断是否为2的零次或多次方
      

  3.   

    2的N次方 的二进制码中一定是只有1位为1的 如(00100->2^2;001010->不可能是
    所以只要匹配10成功就是(或者字符串中只有一个1就行)
    A. float foo = -1;//int 强制转换成float
    0x0123也是int
    小数默认是double
      

  4.   


    public static void operater(StringBuffer x,StringBuffer y) { 
      x.append(y); 
      System.out.println(x);//ab 
      y=x; 
      System.out.println(y);//ab 
    } append方法改变里引用所指向的值,但y=x紧紧是把y指向了x相同的地址(也就是a后来ab那块),但b指向的仍然是b,方法传的地址
      

  5.   

    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;                  Answer: A, D, F
    A会将整形自动提升到float是可以的
    B. float foo = 1.0;表示一个double类型,类型向下要经过强制转换
    C. float foo = 42e1; //这个好像是科学计数法
    D. float foo = 2.02f;  //后缀f标识float,这是可以的
    E. float foo = 3.03d;  //后缀D标识double,类型向下要经过强制转换
    F. float foo = 0x0123; //前缀0x表示16进制,会将转换后的10进制自动提升到float
      

  6.   

    第三题:
    2的乘方转化成二进制是10...的形式,因此匹配这个模式的都是2的乘方。
    2的乘方-1转化成二进制是1...的形式,它与2的乘方进行与运算(&)的结果是0。
    第二题:
    指针引用的问题,方法中的参数是传递进来对象的引用。
      

  7.   


    a 是 ab 原因:stringBuffer在方法中做了append 修改操作;
    b 是 b  原因:在方法中做了引用赋值操作;