java面试2:数据类型
2021/4/28 1:25:21
本文主要是介绍java面试2:数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一部分:必背易漏知识点
1.1算术运算
1.1.1取整(a/b):当除数和被除数都是整数时,结果一定是忽略了精度的整型,当除数和被除数有浮点数时,结果有浮点数,当除数或者被除数有常量,结果有浮点数
1.1.2自增自减的运用:写在后面,是先将变量参与运算,然后再自增;写在前面,是先自增 , 然后参与运算
1.2关系运算
1.2.1判断两端必须是基本数据类型
== 和 != 可以用于判断字符和布尔类型,以及数值(可以用于判断引用数据类型的地址是否相等)
1.2.2 &&和&的区别
1.3位运算符
1.3.1 >> 右移:右位移1位,相当于除以 2
1.3.2 << 左移:左位移1位,相当于乘以 2
第二部分:练习题
简答题
2.1说说&和&&的区别
同:&和&&都可以用作逻辑与的运算符,当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
异:&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式;&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
2.2char型变量中能不能存贮一个中文汉字?为什么?
在java语言中,默认使用的Unicode编码方式,即每个字符占用两个字节。char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
补充:使用 Unicode 意味着字符在 JVM 内部和外部有不同的表现形式,在 JVM内部都是 Unicode,当这个字符被从 JVM 内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以 Java 中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如 InputStreamReader 和 OutputStreamReader,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务
2.3用最有效率的方法算出2乘以8等於几?
2 << 3,因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。
2.43*0.1 == 0.3 将会返回什么?true 还是 false?
false,因为有些浮点数不能完全精确的表示出来。
选择题
2.5以下代码的输出结果是()
public class Test { public static void main(String[] args) { int i =42; String s = (i<40)?"life":(i>50)?"universe":"everything"; } }
A.life
B.universe
C.everything
D.以上答案都不是
分析:语言中运算符分为3类:单目运算符(++、–等)、二目运算符(+、-)、三目运算符(?)
本题中的三目运算符有点特殊,是一个嵌套三目运算符,相当于
String s2; int i =42; if (i<40) { s2 = "life"; } else if(i>50){ s2 = "universe"; } else { s2 = "everything"; }
答案:C
2.6下列程序的输出结果是()
public class Test { public static void main(String[] args) { boolean b = true ? false:true == true?false:true; System.out.println(b); } }
A.true
B.false
C.null
D.以上答案都不是
解析:三目运算符是右结合性的,所以应该理解为:
boolean b = true ? false:((true == true)?false:true);
答案:B
2.7下列程序的输出结果是()
public class Test { public static void main(String[] args) { int a = 5; System.out.println("value is " + ((a<5)?10.9:9)); } }
A编译错误
B.10.9
C.9
D.以上答案都不是
解析:java会根据运算符的精度类型进行自动类型转换,由于前面有一个10.9,因此后面的9也会自动变成9.0。
答案:D
2.8下列程序的输出结果是()
public class Test { public static void main(String[] args) { char x = 'x'; int i = 10; System.out.println(false ? i :x); System.out.println(false ? 10 :x); } }
A.120 x
B.120 120
C.x 120
D.以上答案都不是
解析:int i=10;中的i是一个变量,因此,第一输出x被提升为int型了,因为i是int类型,x的int值为120,所以第一个输出为120;至于第2个输出,Java编程规范中提到:当后两个表达式有一个是常量表达式(本题中是10)时,另外一个类型是T(本题中是char)时,而常量表达式可以被T表示时,输出结果是T类型。所以,因为10是常量,可以被char表示。输出结果是char型的
答案:A
2.9下列程序的输出结果是()
public class Test { public static void main(String[] args) { int i = 32; System.out.println(i >> 32); } }
A.32
B.16
C.1
D.0
解析:移位操作符右边的参数要进行模的32运算,并且移位是对二进制的操作,而二进制中8位是一个循环。所以,i>>32等于i>>0,而i>>33等于i>>1
答案:A
2.10下列程序的输出结果是()
public class Test { static { int x = 5; } static int x,y; public static void main(String[] args) { x--; myMethod(); System.out.println(x + y++ +x); } public static void myMethod() { y = x++ + ++x; } }
解析:
public class Test { static {int x = 5;}//在第一次被载入JVM时运行,但由于是局部变量,x=5不影响后面的值 static int x,y;//初始化x=0;y=0 public static void main(String[] args) { x--; System.out.println(x);//步骤1:在运行myMethod();之前,x是-1,开始调用myMethod()函数 myMethod();//步骤4:在运行myMethod();之后x是1,y是0 System.out.println(x + y++ +x);//步骤5:运行x+(y++)+x=1+0+1=2 } public static void myMethod() { y = x++ + ++x; System.out.println(y);//步骤2:进入myMethod()运行y=(x++)+(++x)后y=0 System.out.println(x);//步骤3:此时x=1 } }
答案:2
2.11下列程序的输出结果是()
public class Test { public static void main(String[] args) { int j = 0; for (int i = 0; i<100; i++) { j = j++; } System.out.println(j); } }
A.0
B.99
C.100
D.101
解析:因为java用了中间缓存变量的机制,所以,j=j++可换成如下写法
temp = j j = j + 1; j = temp;
举个例子再说明
int i = 1; i = i++;//结果是多少,为什么。赋值完成后,会回收寄存器里的数据 System.out.println(i); //1
答案:A
2.12下列程序的输出结果是()
public class Test { public static void main(String[] args) { int i = 0; System.out.println(i++ + i++); // 1+2 =3 System.out.println("i=" + i); // 3 System.out.println(i++ + ++i); // 3+5 =8 System.out.println("i=" + i); // 5 System.out.println(i++ + i++ +i++); // 5 + 6 +7 =18 } }
解析:i++ + i++ 首先执行第一个i++操作,由于自增操作会稍后执行,因此,运算时i的值还是1,但自增操作后,i的值变为了2,接着执行第二个i++,运算时,i的值已经为2。其他的同理
这篇关于java面试2:数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26手写消息中间件:从零开始的指南
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解