zoukankan      html  css  js  c++  java
  • 强制类型转换讨论

    一 强制类型转换的两个注意点

    • 基本类型之间转换只能在数值类型之间进行。
    • 引用类型之间的转换只能在具有继承关系的两个类型之间转换。

    二强制类型转换应用

    1代码示例

    public class ConversionTest
    {
    	public static void main(String[] args)
    	{
    		double d = 13.4;
    		long l = (long)d;
    		System.out.println(l);
    		int in = 5;
    		// 试图把一个数值类型的变量转换为boolean类型,下面代码编译出错
    		// 编译时候会提示: 不可转换的类型
    		// boolean b = (boolean)in;
    		Object obj = "Hello";
    		// obj变量的编译类型为Object,Object与String存在继承关系,可以强制类型转换
    		// 而且obj变量实际上类型是String类型,所以运行时也可通过
    		String objStr = (String)obj;
    		System.out.println(objStr);
    		// 定义一个objPri变量,编译类型为Object,实际类型为Integer
    		Object objPri = new Integer(5);
    		// objPri变量的编译时类型为Object,objPri的运行时类型为Integer,Object与Integer存在继承关系
    		// 可以强制类型转换,而objPri变量实际上类型是Integer类型,
    		// 所以下面代码运行时引发ClassCastException异常
    		String str = (String)objPri;
    	}
    }

     2运行结果

    13

    Hello

    Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

    at ConversionTest.main(ConversionTest.java:23)

    3结果分析

    3.1a处代码运行时会引发异常,因为objPri对象运行时的实际类型是Integer,它无法转化为string。

    3.2 考虑到进行强制类型时可能出现异常,为了让程序更健壮,a处代码可修改如下:

    if(objPri instance of String)
    {
        String str=(String)objPri;
    }
  • 相关阅读:
    Linux
    数据库
    第一篇文章
    解决VMware虚拟机Ubuntu 无法上网问题
    mybatis之sql标签与include标签
    第一个只出现一次的字符
    位运算 -- 只出现一次的的数字
    Oracle递归 start with...connect by...prior
    MyBatis中#{ }和${ }的区别
    表的转置 行转列: DECODE(Oracle) 和 CASE WHEN 的异同点
  • 原文地址:https://www.cnblogs.com/ainima/p/6331654.html
Copyright © 2011-2022 走看看