基本数据类型面试题

由于本人java基础比较渣,最近没事总是喜欢看些基础方面的面试题,发现面试题里面还是有很多坑,从而自己也能更好的去提升自己的技术水平。今天工作闲暇之余整理了看了几篇文章,所以就整理了下,都是写比较经典的面试题,希望大家能用的上,废话不多说,直接上题:

1.Java中,char型变量中能不能存储一个中文汉字,为什么?

 答案:java 的 char 类型变量是用来储存 Unicode 编码字符的,Unicode 字符集包含了汉字,所以 char 类型自然就能存储汉     字,但是在某些特殊情况下某个生僻汉字可能没有包含在 Unicode 编码字符集中,这种情况下 char 类型就不能存储该生僻汉   字了

2.byte a = 127; 
   a+=5; 

   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() {
System.out.println(3 - 2.6 == 0.4);

}判断输出结果?

   答案:false ->int类型和float类型做运算会损失精度所以不等,可以System.out.println(3 - 2.6 )输出结果并不等于0.4

8. Integer i1 =200;  
    Integer i2 =200;          
    System.out.println("i1==i2: "+(i1==i2));                   
    Integer i3 =100;  
    Integer i4 =100;  

    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
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}
对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)
所以范例中,i3 与 i4实际上是指向同一个对象。
而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。
equals() 比较的是两个对象的值(内容)是否相同。

"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

以上几个经典的题其实考核的点都是大概围绕数据类型转换,以及自动装箱拆箱来考的,所以这个就要求我们一定要记住几个基本数据类型的范围排序byte->short->int->long->float->double (范围从小到大),不管拿那个类型来考我们只要知道小范围可以自动转换小范围,而小范围要转大范围必须强转才行

猜你喜欢

转载自blog.csdn.net/ghbxj1989/article/details/80736458