面试技巧

关注公众号 jb51net

关闭
IT专业知识 > IT职场规划 > 面试技巧 >

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异常。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。