【Java】基本数据类型、包装类与字符串间的转换 例题

2024-03-01 1535阅读

温馨提示:这篇文章已超过431天没有更新,请注意相关的内容是否还可用!

写在前面:

关于这道题,初见感觉有点cpu烧坏了,准确来说是看了网上的一些讲解都感觉不尽人意。自己整理了一下,希望能帮助到大家。


题目:

如下两个题目输出结果相同吗?各是什么。

Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);//1.0
Object o2;
if (true) o2 = new Integer(1);
else o2 = new Double(2.0);
System.out.println(o2);//1

分析:

首先分析o1:Object o1 = true ? new Integer(1) : new Double(2.0);

  1. 三元运算符的语法是:

    condition ? expression1 : expression2
    
    • 如果 condition 为真(即 true),则选择 expression1。
    • 如果 condition 为假(即 false),则选择 expression2。
  2. 在该题目中,有以下表达式:

    Object o1 = true ? new Integer(1) : new Double(2.0);

    condition 是 true,因此我们选择 expression1,即 new Integer(1)。虽然是一个整数对象,但是三元运算符的结果类型必须是操作数的共同类型。

共同类型:两个操作数的最小公共类型。

   new Integer(1) 是整数类型,new Double(2.0) 是双精度浮点数类型。整数和双精度浮点数的共同类型是 Double。因此,三元运算符的结果类型是 Double, new Integer(1) 被自动转换为 Double 类型。所以,o1 被赋值为 1.0,

其次分析o2:if (true) o2 = new Integer(1); else o2 = new Double(2.0);

由于条件是 true,所以执行了 if 分支,将 o2 赋值为 new Integer(1)。因此,o2 也被赋值为 1。

综上,结果是相等的。


引申:不同类型数据间的转换
  1. 隐式类型转换(自动类型转换):

    • 隐式类型转换是在编译时自动发生的,无需显式指定。
    • 它允许将一个较小范围的数据类型转换为一个较大范围的数据类型。
    • 例如,将 int 转换为 double 或将 short 转换为 int。
    • 隐式类型转换不会导致数据丢失。
  2. 显式类型转换(强制类型转换):

    • 显式类型转换需要使用强制转换运算符(例如 (type))来明确指定转换的目标类型。
    • 它允许将一个较大范围的数据类型转换为一个较小范围的数据类型。
    • 例如,将 double 转换为 int 或将 long 转换为 short。
    • 显式类型转换可能导致数据溢出或精度丢失,因此需要谨慎使用。
  3. 基本数据类型之间的转换:

    • 整型、实型和字符型被视为简单数据类型。
    • 低级到高级的自动类型转换:
      • 低级变量可以直接转换为高级变量,例如:byte b; int i = b;
      • 对于 char 类型,向高级类型(整型)转换时,会转换为对应的 ASCII 码值。
    • 高级到低级的强制类型转换:
      • 使用强制类型转换,例如:int i = 99; byte b = (byte) i;
  4. 字符串与其他数据类型的转换:

    • 将其他类型转换为字符串:
      • 调用类的 toString() 方法。
      • 使用自动转换:X + ""。
      • 使用 String.valueOf(X)。
    • 将字符串转换为其他类型:
      • 使用静态 parseXXX 方法,例如:int i = Integer.parseInt("123");
  5. Date 类与其他数据类型的转换:

    • Date 类与整型之间的对应关系:
      • 使用 Date 构造函数,例如:Date date = new Date(2023, 10, 11);
    • Date 类与长整型之间的对应关系:
      • 使用 Date 构造函数,例如:Date date = new Date(1633948800000L);
    • 获取 Date 类中的年、月、日等信息,例如:int year = date.getYear();

补充:
public class methodTest {
    public void method(){
        Integer i =new Integer(1);
        Integer j=new Integer(1);
        //通过new创建的对象是一定不相等 比较的是空间地址
        System.out.println(i==j);
        Integer m=1;
        Integer n=1;
        //Integer是int的包装类,如果不显式通过new Integer来创建
        //java则会在虚拟机中为其创建缓存,范围为-128-127
        System.out.println(m==n);
        Integer x=128;
        Integer y=128;
        System.out.println(x==y);
        //超出了范围
    }
 
【Java】基本数据类型、包装类与字符串间的转换 例题 写完了>w
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]