【Java】基本数据类型、包装类与字符串间的转换 例题
温馨提示:这篇文章已超过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);
-
三元运算符的语法是:
condition ? expression1 : expression2
- 如果 condition 为真(即 true),则选择 expression1。
- 如果 condition 为假(即 false),则选择 expression2。
-
在该题目中,有以下表达式:
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。
综上,结果是相等的。
引申:不同类型数据间的转换
-
隐式类型转换(自动类型转换):
- 隐式类型转换是在编译时自动发生的,无需显式指定。
- 它允许将一个较小范围的数据类型转换为一个较大范围的数据类型。
- 例如,将 int 转换为 double 或将 short 转换为 int。
- 隐式类型转换不会导致数据丢失。
-
显式类型转换(强制类型转换):
- 显式类型转换需要使用强制转换运算符(例如 (type))来明确指定转换的目标类型。
- 它允许将一个较大范围的数据类型转换为一个较小范围的数据类型。
- 例如,将 double 转换为 int 或将 long 转换为 short。
- 显式类型转换可能导致数据溢出或精度丢失,因此需要谨慎使用。
-
基本数据类型之间的转换:
- 整型、实型和字符型被视为简单数据类型。
- 低级到高级的自动类型转换:
- 低级变量可以直接转换为高级变量,例如:byte b; int i = b;
- 对于 char 类型,向高级类型(整型)转换时,会转换为对应的 ASCII 码值。
- 高级到低级的强制类型转换:
- 使用强制类型转换,例如:int i = 99; byte b = (byte) i;
-
字符串与其他数据类型的转换:
- 将其他类型转换为字符串:
- 调用类的 toString() 方法。
- 使用自动转换:X + ""。
- 使用 String.valueOf(X)。
- 将字符串转换为其他类型:
- 使用静态 parseXXX 方法,例如:int i = Integer.parseInt("123");
- 将其他类型转换为字符串:
-
Date 类与其他数据类型的转换:
- Date 类与整型之间的对应关系:
- 使用 Date 构造函数,例如:Date date = new Date(2023, 10, 11);
- Date 类与长整型之间的对应关系:
- 使用 Date 构造函数,例如:Date date = new Date(1633948800000L);
- 获取 Date 类中的年、月、日等信息,例如:int year = date.getYear();
- Date 类与整型之间的对应关系:
补充:
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);
//超出了范围
}
写完了>w
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
