1.Java中,char型变量中能不能存储一个中文汉字,为什么?
答案:java 的 char 类型变量是用来储存 Unicode 编码字符的,Unicode 字符集包含了汉字,所以 char 类型自然就能存储汉 字,但是在某些特殊情况下某个生僻汉字可能没有包含在 Unicode 编码字符集中,这种情况下 char 类型就不能存储该生僻汉 字了
2. 请问输出结果是什么?
byte a = 127; System.out.println(a); |
答案:124。首先byte取值范围-128~127 当a+=1时此时已经是超过了byte的临界值此时输出的为-128 、a+=2时输出 为-127,以此类推a+=5时输出为-124,只要记住这个技巧对于这个面试题就可以应对了。
3.不同类型的变量在相互赋值时,什么情况下需要进行强制类型转换?
答案:范围大的->范围小、长->短、子类—>父类
4.java 中 float f = 3.4; 是否正确?
答案:不正确,因为3.4是双精度类型属于double类型,而double类型范围大于float类型,如果想要赋给float类型必须强制转 换:float f=(float)3.4或者float f=3.4F
byte->short->int->long->float->double (范围从小到大)
5.switch语句能否作用在byte上,能否作用在long上,能否作用在string上?
答案:首先switch支持int类型,所有可以转换成int类型都支持,byte,char,short范围小于int。byte的存储范围小于int,可以向int类型进行隐式转换,所以switch可以作用在byte上long的存储范围大于int,不能向int进行隐式转换,只能强制转换,所以switch不可以作用在long上string在1.7版本之前不可以,1.7版本之后switch就可以作用在string上了。
6.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?
答案:对于short s1=1;s1=s1+1来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会 出现类型转换错误。对于short s1=1;s1+=1来说 +=是java语言规定的运算符,java编译器会对它进行特殊处理(实际就是在 内部做了类型转化short s1 = 1; s1 +=1等价于short s1 = 1; s1=(short)s1+1),因此可以正确编译。
7.判断输出结果
public static void say() { } |
答案:false ->int类型和float类型做运算会损失精度所以不等,可以System.out.println(3 - 2.6 )输出结果并不等于0.4
8.判断输出结果
Integer i1 =200; System.out.println("i3==i4: "+(i3==i4)); |
答案:(i1==i2)为false(i3==i4)为true。
本题考点int类型的自动装箱,什么是自动装箱具体可参考https://blog.csdn.net/ghbxj1989/article/details/80736147
例如:Integer i = 100;相当于编译器自动为您作以下的语法编译
Integer i = Integer.valueOf(100);
而自动装箱的源码
public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127 |
对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)
所以范例中,i3 与 i4实际上是指向同一个对象。
而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。
equals() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。
9、String 是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),枚举类型(enumeration type)也是引用类型。
10、Java有没有goto?
goto 是Java中的保留字,在目前版本的Java中没有使用。
11、在Java中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。
12、.64位的JVM当中,int的长度是多少?
Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的Java 虚拟机中,int 类型的长度是相同的。
13、可以将int强转为byte类型么?会产生什么问题?
我们可以做强制转换,但是Java中int是32位的而byte是8 位的,所以,如果强制转化int类型的高24位将会被丢弃,byte 类型的范围是从-128到128
14、int a = 1; int b = 2; 怎么让a,b值交换?
答: a = a ^ b; b = a ^ b; a = a ^ b; |
15、&和&&的区别?
答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。