2017年10月11日 关于修饰符的几个面试题

题目1  private 修饰符

/*private修饰符*/
public class Demo1 {
    
void dosometing(){
    //方法里面的局部修饰符不能用修饰符,因为修饰符主要是控制包与包
//    private String s="";   会报错
//    int i=s.length();
}
}

题目2 do while 和++

public class Demo2 {
    /*
     * do while循环最少也会执行一次,直到while条件为false时退出
     * 本题中,执行一次循环体后,循环就退出。其中a自加一次,值为2
     * b在循环体中被修改为10-1=9,在while中执行b--,再进行一次自减,因此为8
     * 需要注意的是++,--不管在变量的前还是后,其实对变量本身的值都是进行加1或减1
     * 区别是表达式的返回值不同
     */
  public static void main(String[] args) {
      int a =1;
      int b =10;
      do{
          b-=a;
          a++;
      }while(b--<0);
      System.out.println("a="+a+"  b="+b);//a=2 b=8
}
}

 题目3  三目表达式

 

public class Demo3 {
 public static void main(String[] args) {
    int a =5;
    System.out.println("输出的结果"+((a<5)?9.9:9));
//结果为9.0 } }

 

题目4 double 和float

public class Demo4 {
  public static void main(String[] args) {
       /*
        * 浮点数默认是64位的double类型存储,而float是32位的,高精度的数值赋值给低精度的变量
        * 会发生编译错误,可以试用后缀f,或者使用强制转换
        */
      double d = 1.0;
     // float f = 1.0;    //这里会直接报错
      float f1=1.0f;      //第一种方法 后面加上f             
      float f2=(float)1.0;   //第二种方法 进行强制转换
}
}

 题目5  ==来比较基本数据类型

public class Demo5 {
  public static void main(String[] args) {
      /*
       * 用==比较基本数据类型,比较的是数值的二进制。小数默认是以64位的double类型存储,因此0.3和0.3f的二进制值不同,
       * 而0.5和0.5f的二进制相同
       */
    System.out.println(0.3==0.3f);  //false
    System.out.println(0.5==0.5f);  //true
}
}

题目6 char可以存储汉字吗

public class Demo6 {
  public static void main(String[] args) {
      /*
       * 可以存储一个汉字
       * Java默认使用Unicode编码,一个汉字需要两个字节
       * char类型是16位,双字节,表示一个字符,因此可以存储一个汉字
       */
    char c1='*';
    char c2='n';
}
}

 题目7 &和&&的区别

public class Demo7 {
    /*
     * &和&&都是Java中的逻辑“与”运算符,当操作符两边的表达式都是true的时候,返回true, 否则返回false
     * 区别在于&&存在短路问题,也就是说,当&&左侧的表达式返回为false,就不再运算右侧的表达式,直接返回false
     */
    public static void main(String[] args) {
        String str = null;
        if (str != null && str.length() == 6) {  //前面为false后面的内容就不走了
            System.out.println("正确");
        }
        // 会报错
        // if(str!=null&str.length()==6){
        // System.out.println("正确");
        // }
    }
}

 题目8  位移运算符

public class Demo8 {
  //计算2*8,哪种方法效率最高
    /*
     * Java语言中有三个位移运算符,分别是左移<<,有符号右移>>,无符号右移>>>,左移一位相当于乘以2,
     * 右移一位相当于除以2,用移位运算符进行运算,是直接对二进制进行运算,效率较高
     */
    public static void main(String[] args) {
        int a =2;
        long time=System.currentTimeMillis();
        for (int i = 0; i < 2000000000; i++) {        
            a=a<<3;            
        }
        long time2=System.currentTimeMillis();
        long timeBetween =time2-time;
        System.out.println("使用位移运算所用的毫秒为:"+timeBetween);
        
        time=System.currentTimeMillis();
        for (int i = 0; i < 2000000000; i++) {            
            a=a*8;            
        }
        time2=System.currentTimeMillis();
        timeBetween =time2-time;
        System.out.println("使用直接运算所用的毫秒为:"+timeBetween);
    }
}

 题目9  或运算符

public class Demo9 { 
    public static void main(String[] args) {
        //下面语句输出结果是多少
        System.out.println(4|3); //7
        int a1 =4;
        int a2=3;
        System.out.println(Integer.toBinaryString(a1)); //4的二进制值
        System.out.println(Integer.toBinaryString(a2)); //3的二进制值
        System.out.println(Integer.toBinaryString(a2+a1)); //7的二进制值        
    
        /*
         * |是Java中的运算符,是对二进制进行计算,两位都是1返回1,否则返回0
         * 位运算符还有~,&,^
         */
        /*
         * 03的二进制为00000000000000000000000000000011
           04的二进制为00000000000000000000000000000100
           07的二进制为00000000000000000000000000000111
         */
    }
}

 

posted on 2017-10-11 10:26  Loseheart  阅读(234)  评论(0编辑  收藏  举报