基本数据类型相关面试题

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() 比较的是两个对象的值(内容)是否相同。
"==" 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

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异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

发布了45 篇原创文章 · 获赞 0 · 访问量 1910

猜你喜欢

转载自blog.csdn.net/weixin_41804367/article/details/103041679