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

    public class Integer_Object {
    
        public static void main(String[] args){
            Object obj = new ooo();
    //        Integer i = (Integer) obj;
            Integer i = Integer.parseInt(obj.toString());
            System.out.println(i);
        }
    }
    class ooo{
        public String toString(){
            return 1+"";
        }
    }

    //上述转换中:注释掉的为错误的转换

    以上为以前的转载问题;  重新整理时发现这样的转换并没有意思,ooo对象跟integer并不是兼容的类型(Java中强制类型转换的实现机制 ),调用了tosting()实际上是相当于一个新的String类型,之后引发思考想了解一下java的强制类型转换的jvm实现:



    java强制类型转换的JVM的实现

    首先狭义上的强制类型转换,我指的是引用类型,且是父类向子类转换,这种转换只牵扯到引用名义类型的转换,具体的对象内存没有发生一点变化。
    而基本类型的转换与此不同,其数据确实发生了变化,但是基本类型并不是对象。如果是基本类型和其包装类的相互转化,实际上调用是Integer.parseInt()和Integer.valueOf()来完成。
    父类向子类进行强制转换,如果成功不会有任何数据丢失,如果不是其子类,那么会报错。
    基本类型之间的转换,如果是大范围的向小范围的转换,确实有可能会发生数据丢失或精度丢失。 来源:知乎 http:
    //www.zhihu.com/question/37114869/answer/70514195
    public class Integer_Object {

        public static void main(String[] args){
            ooo sup = new ooo();
            oooo sub = (oooo) sup;//运行会出现异常信息:ooo cannot be cast to oooo
            System.out.println(sup instanceof oooo);//false
            
            ooo sup1 = new oooo();
            oooo sub1 = (oooo) sup1;//这个sup1对象实例在内存中的本质还是oooo类型的,只不过它的能力临时被消弱了(向上转型)而已,如果我们想变强怎么办?将其对象类型还原!
            System.out.println(sup instanceof oooo);//true
            
            //总:所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。
        }
    }
    class ooo{
        
    }
    class oooo extends ooo{
        
    }

    more:

    Java instanceof 关键字是如何实现的?

    Java类加载器总结

     

    深入分析java ClassLoader 

    java ClassLoaders Tutorial

     

     

     

     

    你以为躲起来就找不到你了吗?没有用的!象你这样出色的男人,无论在什么地方,都像漆黑中的萤火虫一样,那样的鲜明,那样的出众。你那忧郁的眼神,稀嘘的胡喳子,神乎其神的刀法,和那杯Dry Martine,都深深地迷住了我!
  • 相关阅读:
    flex>数据绑定、数据列表 小强斋
    上周问题总结与解决方案
    asp.net 实现无限级分类
    发个项目需求大家瞅瞅
    ASP.NET POST模拟登陆
    HttpWebRequest发送数据 post
    asp.net 生成静态页面
    xcode4.1自带SVN配置
    模拟登录
    C#中用HttpWebRequest/HttpWebResponse来发送/接收数据
  • 原文地址:https://www.cnblogs.com/wjjFJ/p/5947435.html
Copyright © 2011-2022 走看看