写面试题中遇到的问题(1)

本文详细解析了Java中的整数类型在-128到127之间的自动装箱特性,指出在该范围内Integer对象不会创建新地址值。同时,介绍了不同数据类型相加时的数据类型转换规则,并讨论了空指针异常的判断条件。最后,通过示例分析了parseInt和valueOf方法在处理字符串转整数时的区别。
摘要由CSDN通过智能技术生成

本文写给正在努力的自己,努力的补基础知识,五道题一篇

  1. 整数类型奇怪的127和128
    以下输出结果为true还是false
    public static void main(String[] args) {
        Integer n1 = new Integer(2);
        Integer n2 = new Integer(2);
        Integer n3 = 127;
        Integer n4 = 127;
        Integer n5 = 128;
        Integer n6 = 128;

		System.out.println(n1 == n2);
        System.out.println(n3 == n4);
        System.out.println(n5 == n6);
    }

解析
实际上在-128到127之间只要不new对象数值一样就不会产生新的地址值,通过debug运行可看到当数值超过127时将会有新的地址值
以下是我找到其他博主的解释
自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

Java自动装箱的优点:对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象(地址),不需要再创建一个新的Integer对象,否则创建新的Integer对象

Java自动装箱的缺点:因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作
在这里插入图片描述

  1. 不同数据类型相加
		//若有定义语句
        int a = 1;
        double b = 2.33;
        char c = 'a';

那么a+b得到什么数据类型,那么a+c得到什么数据类型,那么b+c得到什么数据类型,那么a+b+c得到什么数据类型?

        double v = a + b;
        int i = a + c;
        double v1 = b + c;
        double v2 = a + b + c;

这道题跟数据类型的等级有关,总结了一下,char<short<int<float<double,当低级的跟高级的相加,将会变成高级的数据类型

  1. 以下哪行代码会报空指针异常
        String s = null;

        if ((s!= null)&(s.length()>0));

        if ((s!=null)&&(s.length()>0));

        if ((s!=null)|(s.length()==0));

        if ((s!=null)||(s.length()==0));

做这道题之前,我们先了解一下&和&&的区别还有|和||的区别:
一 , &的可以作为位运算符和判断条件使用,而&&只能作为判断条件使用
二, 当他们均作为判断条件使用时,&&:若前错则短路跳过此次判断直接返回false,而&则会将前后都判断一次
在这里插入图片描述
在这里插入图片描述
我们知道2/0时一定会报ArithmeticException错, 但是当我们使用&&时,前半段为false,所以跳过后半段直接判定为false。
|和||也是一样的道理,总结一下,当作为判断符号使用时,一个老头就要挑两桶水,两个老头就开始偷懒了,只看前面的条件,如果前面是对的才看后面的条件

  1. 关于异常处理的描述中,错误的是()。
    A:程序运行时异常又java虚拟机自动进行处理
    B:使用try-catch-finally 语句捕获异常
    C:可使用throw语句抛出异常
    D:捕获的异常只能在当前方法中处理,不能在其他方法中处理

解析:编译时异常必须显示处理,运行时异常交给虚拟机。

运行时异常可以不处理。当出现这样的异常时,总是由虚拟机接管。比如我们从来没有人去处理过Null Pointer Exception异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往不对它处理罢了。也就是说,如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
在这里插入图片描述

  1. 当不告诉你a,b的数据类型时分析其数据类型是以及他们的数值是否相等
        a = Integer.parseInt("1024");
        b = Integer.valueOf("1024").intValue();        

答案:a和b都是整数类型变量并且他们的值相等
解析:intValue()是把Integer对象类型变成int的基础数据类型;
parseInt()是把String变成int的基础数据类型;
Valueof()是把String转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)

本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚不想睡沙发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值