`
yeshaoting
  • 浏览: 686251 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【解惑】Java类型间的转型(转载)

    博客分类:
  • J2SE
阅读更多

转载: http://hxraid.iteye.com/blog/466997 by Heart.X.Raid

★ 基本数据类型间的转换

1、Java要做到平台无关性,所有的基本数据类型所占的字节数量均是固定的。

           boolean ——1/8字节(1 bit)     byte —— 1字节             char —— 2字节         short —— 2字节

           int —— 4字节                          long —— 8字节             float —— 4字节         double —— 8字节

2、基本数据类型间的转换 

    (1)  所占字节数相对少的基本类型可以自动向字节数相对多的转换。

Java代码  收藏代码
  1. byte c=(byte)-1//强制转化为byte型     
  2. int i=c; //自动转化为整型  
  3. System.out.println(i);//打印结果:-1  

      比如上面的byte型可以自动转化为int型,但这种转化是带符号扩展的。因为byte是有符号类型。这里有一个例外,就是char,它是一个无符号类型,因此自动扩展成int、long等类型时是不带符号扩展的。

Java代码  收藏代码
  1. char c=(char)-1;   
  2. int i=c; //自动转化为整型  
  3. System.out.println(i); //打印结果:65535  

      上面的代码首先将整型0xFFFFFFFF(32bits)强制类型截短为0xFFFF(16bits)。而这个数的类型是char,那么它表示的数是65535,扩展成int类型的时候是无符号扩展,高位补0,因此变量i=0x0000FFFF(65536)。

 

    (2)  所占字节数多的向字节数少的转换要强制执行。

      大范围类型多出的bit将会被截去。

Java代码  收藏代码
  1. int i=10000;  
  2. byte j=(byte)i;  //4字节强制转化为1字节  
  3. System.out.println(j);//打印结果: 16   

    (3)   字节一样多的,long向double类型转化也需要强制类型转化,反向不需要。

    (4)  boolean型不能与其他任何数值类型之间转换。

 

 

★  类类型间的转换

这里有一句很经典的话:男人绝对是人,人可能不是男人,只有原来是男人的人才有希望变回男人。

 

1、类类型的自动转换,只能在继承层次中自下而上的自动转换(向上转型),即子类自动转换为父类。

Java代码  收藏代码
  1. //自动向上转型  
  2. class Employee{  
  3. }  
  4. class Manager extends Employee{ //继承关系  
  5. }  
  6.   
  7. Manager m=new Manager();  
  8. Employee e=m;  //Manager类型自动转换为Employee类型  

 2、强制类型转换

      在继承层次中将一个父类的变量转变成子类类型,必须强制类型转换。但这种转换并不是一定成功的:

Java代码  收藏代码
  1. //运行失败  
  2. class Employee{  
  3. }  
  4. class Manager extends Employee{  
  5. }  
  6.   
  7. Employee e=new Employee(); //e的实际类型为Employee  
  8. Manager m=(Manager)e; //强制转换为Manager  

      注意:上面的代码编译时可以通过,但运行的时候会产生一个ClassCastException 的非检查异常。如果不捕获这个异常,程序将终止。再看一段代码:

Java代码  收藏代码
  1. //运行成功  
  2. class Employee{  
  3. }  
  4. class Manager extends Employee{  
  5. }  
  6.   
  7. Employee e=new Manager(); //多态,e的实际类型为Manager  
  8. Manager m=(Manager)e; //强制类型转换  

       这段代码可以正常运行。   

       如果父类引用的是一个子类的类型(多态情况下)。这是可以通过强制类型转换把父类变量赋值类子类变量。否则强制类型转换将以ClassCastException异常结束。             

3、instanceof检查能否成功的向下转型

     在类类型强制转换的程序设计中,要养成一个良好的习惯:在转换之前 ,使用instanceof运算符查看是否能成功转换。

      instanceof运算符用来判断一个对象是不是某个类或其子类的实例。

Java代码  收藏代码
  1. class Employee{  
  2. }  
  3. class Manager extends Employee{  
  4. }  
  5. //e1的引用是Employee类型,e1对象是Employee类的实例,  
  6. Employee e1=new Employee();  
  7. System.out.println("e1:"+e1 instanceof Manager);  
  8. //e2的引用是Employee类型,e2对象是Manager类的实例,  
  9. Employee e2=new Manager();  
  10. System.out.println("e2:"+e2 instanceof Manager);  
  11.   
  12. //运行结果:  e1 : false  
  13.                    e2 : true  

        因此如果instanceof为false的时候,编译器将不会进行这个转化

Java代码  收藏代码
  1. if(e1 instanceof Manager){  
  2.         Manager m=(Manager)e1;  
  3. }  


总结:(1) 类类型只能在继承层次内进行类型转换

                (2) 在向下转型之前,应该使用instanceof进行检查

分享到:
评论
3 楼 yeshaoting 2012-04-22  
美丽的小岛 写道
师兄,这里如果能总结一个从long或double之类到byte[]型的就好了。

整数转换成字节型数组 http://jarg.iteye.com/blog/1493801
不知道是不是你想要的。
2 楼 yeshaoting 2012-03-20  
美丽的小岛 写道
师兄,这里如果能总结一个从long或double之类到byte[]型的就好了。

我好久没编程了,你有空可以总结一个呀.
1 楼 美丽的小岛 2012-03-18  
师兄,这里如果能总结一个从long或double之类到byte[]型的就好了。

相关推荐

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

    Java解惑(中文版)_java_java解惑_solve65p_

    《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...

    Java解惑.pdf

    这份“Java解惑.pdf”文档很可能包含了解决Java开发者在编程过程中遇到的常见问题和困惑的详细解答。以下是可能涵盖的一些Java相关知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制...

    java解惑java解惑java解惑

    "Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...

    Java解惑 java

    Java解惑 Java解惑 Java解惑

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    JAVA解惑.pdf

    《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...

    Java 解惑 Java新人学习

    Java 解惑.pdf 适合新人学习。 Java新人学习

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    "java解惑" PDF版本

    "java解惑" PDF版本

    java解惑 for all javaer

    讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大编程爱好者称为Java四大名著之一,旨在解决初学者及有一定经验的开发者在学习和使用Java过程中遇到的各种困惑。这本书深入浅出地讲解了Java语言的核心概念和...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

    JAVA解惑.pfd

    JAVA解惑

    java解惑(包括pdf和答案)

    "java解惑"这个主题旨在帮助初学者理解和解决在学习Java过程中遇到的问题,通过实例来深入浅出地讲解Java的基础知识,同时也强调了实用技巧和注意事项。 "Java解惑"的资料可能包含了两部分:`.chm`和`.pdf`格式的...

    Java解惑(中文).pdf

    《Java解惑(中文)》是一本专门为Java开发者编写的指南书籍,旨在解决在实际编程过程中遇到的各种疑惑和难题。本书以中文语言呈现,使得国内的Java程序员能够更轻松地理解并应用其中的知识。通过阅读这本书,读者...

Global site tag (gtag.js) - Google Analytics