★ 基本数据类型间的转换
1、Java要做到平台无关性,所有的基本数据类型所占的字节数量均是固定的。
boolean ——1/8字节(1 bit) byte —— 1字节 char —— 2字节 short —— 2字节
int —— 4字节 long —— 8字节 float —— 4字节 double —— 8字节
2、基本数据类型间的转换
(1) 所占字节数相对少的基本类型可以自动向字节数相对多的转换。
byte c=(byte)-1; //强制转化为byte型
int i=c; //自动转化为整型
System.out.println(i);//打印结果:-1
比如上面的byte型可以自动转化为int型,但这种转化是带符号扩展的。因为byte是有符号类型。这里有一个例外,就是char,它是一个无符号类型,因此自动扩展成int、long等类型时是不带符号扩展的。
char c=(char)-1;
int i=c; //自动转化为整型
System.out.println(i); //打印结果:65535
上面的代码首先将整型0xFFFFFFFF(32bits)强制类型截短为0xFFFF(16bits)。而这个数的类型是char,那么它表示的数是65535,扩展成int类型的时候是无符号扩展,高位补0,因此变量i=0x0000FFFF(65536)。
(2) 所占字节数多的向字节数少的转换要强制执行。
大范围类型多出的bit将会被截去。
int i=10000;
byte j=(byte)i; //4字节强制转化为1字节
System.out.println(j);//打印结果: 16
(3) 字节一样多的,long向double类型转化也需要强制类型转化,反向不需要。
(4) boolean型不能与其他任何数值类型之间转换。
★
类类型间的转换
这里有一句很经典的话:男人绝对是人,人可能不是男人,只有原来是男人的人才有希望变回男人。
1、类类型的自动转换,只能在继承层次中自下而上的自动转换(向上转型),即子类自动转换为父类。
//自动向上转型
class Employee{
}
class Manager extends Employee{ //继承关系
}
Manager m=new Manager();
Employee e=m; //Manager类型自动转换为Employee类型
2、强制类型转换
在继承层次中将一个父类的变量转变成子类类型,必须强制类型转换。但这种转换并不是一定成功的:
//运行失败
class Employee{
}
class Manager extends Employee{
}
Employee e=new Employee(); //e的实际类型为Employee
Manager m=(Manager)e; //强制转换为Manager
注意:上面的代码编译时可以通过,但运行的时候会产生一个ClassCastException
的非检查异常。如果不捕获这个异常,程序将终止。再看一段代码:
//运行成功
class Employee{
}
class Manager extends Employee{
}
Employee e=new Manager(); //多态,e的实际类型为Manager
Manager m=(Manager)e; //强制类型转换
这段代码可以正常运行。
如果父类引用的是一个子类的类型(多态情况下)。这是可以通过强制类型转换把父类变量赋值类子类变量。否则强制类型转换将以ClassCastException异常结束。
3、instanceof检查能否成功的向下转型
在类类型强制转换的程序设计中,要养成一个良好的习惯:在转换之前 ,使用instanceof运算符查看是否能成功转换。
instanceof运算符用来判断一个对象是不是某个类或其子类的实例。
class Employee{
}
class Manager extends Employee{
}
//e1的引用是Employee类型,e1对象是Employee类的实例,
Employee e1=new Employee();
System.out.println("e1:"+e1 instanceof Manager);
//e2的引用是Employee类型,e2对象是Manager类的实例,
Employee e2=new Manager();
System.out.println("e2:"+e2 instanceof Manager);
//运行结果: e1 : false
e2 : true
因此如果instanceof为false的时候,编译器将不会进行这个转化
if(e1 instanceof Manager){
Manager m=(Manager)e1;
}
总结:(1) 类类型只能在继承层次内进行类型转换
(2) 在向下转型之前,应该使用instanceof进行检查
分享到:
相关推荐
4. **类型转换**:Java中的类型转换,包括基本类型与包装类之间的转换、向上转型和向下转型,都可能产生陷阱。书中可能通过实例解释这些转换的规则和潜在问题。 5. **集合框架**:Java集合框架是程序设计的基础,书...
例如,一个可能的谜题是关于类型转换的,它可能会涉及到向上转型和向下转型的规则,以及何时可能出现ClassCastException。通过这样的问题,读者可以了解到Java类型的静态性和安全性,以及如何正确地进行类型转换。 ...
- **解惑**:数据类型转换是Java中的常见操作,但需要注意自动类型提升和显式转换的区别。当从低精度类型转换到高精度类型时,可能会发生数据丢失。解决方法是在转换前进行适当的检查,并确保使用正确的转换方式。 ...
Java的多态特性允许对象转型,但必须遵循继承关系。此谜题可能涉及到父类引用指向子类对象的情况,以及在转型过程中的注意事项,比如安全转型和强制转型。 谜题7:互换内容 在Java中,交换两个变量的值通常是通过...
### Java解惑——语法细节介绍 #### 概述 Java作为一种广泛应用的编程语言,拥有庞大的用户群体和丰富的应用场景。在日常开发过程中,我们往往会遇到一些容易忽视却又十分重要的语法细节。这些细节虽然不起眼,但...
本篇文章是关于JAVA面试题解惑系列的合集,由臧圩人撰写,涵盖了多个与Java编程相关的核心知识点和常见面试问题。该系列文章精选了Java面试题,帮助读者深入理解和掌握Java编程的精髓。本篇文章将根据提供的内容部分...
谜题6:多重转型 谜题7:互换内容 谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:畜牧场 谜题14:转义字符的溃败 谜题15:令人晕头转向的...
1. **类型转换和自动装箱拆箱**:Java中的基本类型与对应的包装类之间可以进行自动转换,但这种转换可能隐藏着一些潜在的问题,如精度丢失、隐式转型等。 2. **变量作用域**:Java中变量的作用域是严格控制的,包括...
4. **学员支持**:好的培训机构会提供持续的学员支持,包括学习辅导、答疑解惑、就业指导等,帮助学员顺利完成学习并顺利转型。 5. **课程更新**:技术日新月异,好的培训课程应保持内容的时效性,定期更新以跟进...
在这里,学生可以提问,教师和其他学生可以进行答疑解惑,促进知识的共享和讨论。同时,考虑到远程教育的需要,平台还应集成实时通讯功能,如在线聊天室或视频会议,以便进行在线辅导和小组讨论。 另外,评估和反馈...
在信息化社会的今天,教育领域的数字化转型已成为不可逆转的趋势。随着互联网技术的快速发展,传统的学习模式正逐渐被在线教育平台所取代。考研作为高等教育的重要环节,其学习资源的整合与交流平台的建立显得尤为...