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 */ } }