一些奇奇怪怪不好理解的代码

1.三目运算符输出

A1:判断以下输出

Object obj1 = true ? new Integer(1) : new Double(2.0);
        System.out.println(obj1);

输出:
在这里插入图片描述
解析:

 Object obj1 = true ? new Integer(1) : new Double(2.0);
        //这里是一个三元运算符,因为Integer和Double都是Object的子类,
        // 但是呢,Integer在三元运算符中的前一位判断中,那么最后对象是建立的Integer对象,注意提高优先级

注意:
在做三元运算符的时候,要把整个三元运算符看作一个整体, 如果两个的精度不一致,会提高精度,无论输出是谁,但是精度必须是两者中最高的,
精度:double > float > long > int >char

2.基本数据类型和包装类

A01:判断下列语句有没有错

Double d = 2.0;
Float f = 1.5;

结果:
在这里插入图片描述
解析:
1、后面的数据皆为数据类型,第一句话,是将基本数据类型20给调用了valueOf()方法装箱了,相当于就是实例化成了一个Double对象,所以没问题
2、第二句话报错是因为,1.5被默认成是double类型的,double数据类型无法转换成float类型,所以也就也没有被自动装箱,所以也就不是一个Float对象

A02:判断以下语句的输出结果

public class StringExercise03 {
    public static void main(String[] args) {
        String a = "123";
        String b = new String("123");
        System.out.println(a.equals(b));
        System.out.println(a == b);
        System.out.println(a == b.intern());
        System.out.println(b == b.intern());
    }
}

输出:
在这里插入图片描述

解析:

public class StringExercise03 {
    public static void main(String[] args) {
        String a = "123";// a指向常量池的”123“
        String b = new String("123");// b指向堆中对象
        System.out.println(a.equals(b));//true,比较数值
        System.out.println(a == b);//false,比较对象,两者的对象地址所指向不同
        System.out.println(a == b.intern());//true,
        // intern()方法:返回字符串对象的规范表示,简单来说就是一个一个对象调用了intern()方法,那么对象直接指向常量池
        System.out.println(b == b.intern());//false,b是一个对象,b.intern是直接指向常量池
    }
}

注意:
intern()方法API的解释:当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自常量池的字符串。 否则,此String对象将添加到常量池中,并返回对此String对象的引用。
通俗理解:只要String对象调用了 intern ( ) 方法,那么这个对象就是指向常量池的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值