Java基本类型和运算符(面试题)
面试题整理账号
1.Java中的基本类型有哪些?String 是最基本的数据类型吗?
基本数据类型:byte,short,char,int,long,float,double,boolean 一共8种。String不是基本数据类型,属于引用类型。
2.char型变量中能不能存储一个中文汉字,为什么?
java的char类型可以用来存储Unicode编码字符,而Unicode编码包含了中文,所以char类型可以用来存储一个中文汉字,但是某些特殊的生僻汉字可能没有包含在Unicode编码字符集中,这种情况下就不能用来存储一个汉字了。
3.short s1=1; s1=s1+1;有什么错?short s1=1;s1+=1; 有什么错?
1.对于s1定义是short类型,但是在进行s1+1运算时类型自动提升为了int类型,所以在将int赋值给short类型的s1时,就会发生类型转换错误,2. 由于+=是符合java标准的运算符,java编辑器在进行运算时会进行特殊处理,所以可以正确执行。
4.Java中的Integer和int有什么区别?
int 是Java的内置基本数据类型之一,Java为每一个基本数据类型都提供了封装类型(包装类型),Integer就是int的封装类,int的默认值为0,Integer的默认值为null,所以Integer可以区分出来赋值未赋值与0的区别。
5.能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?
不行,我们不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量,因为 double 类型的范围比 long 类型更广,所以必须要进行强制转换。(只能小转大,大转小要强转)
6.java 中 3*0.1 == 0.3 将会返回什么?true 还是 false?
false,因为浮点数不能完全精确的表示出来,一般都会损失精度。
7.java 中 float f = 3.4; 是否正确?
不正确,3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型(down-casting,也称为窄化)会造成精度损失,需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F才可以
8.下面Integer类型的数值比较输出的结果为?
public static void main(String[] args) { Integer n1 =100,n2 =100,n3 =150,n4 =150; System.out.println(n1 == n2); System.out.println(n3 == n4); }
第一个是true,第二个是false,原因是-128~127之间不会new新的对象,参见源码:
private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} }
9.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
10.用最有效率的方法计算2乘以8?
2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)
11.&和&&的区别?
&按位与;&&逻辑与。&&运算符进行短路与运算。&和&&二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:password != null &&!password.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。