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 +"";
}
} //上述转换中:注释掉的为错误的转换

以上为以前的转载问题;  重新整理时发现这样的转换并没有意思,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

jvm强制类型转换的更多相关文章

  1. 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;

    Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...

  2. scala object 转Class Scala强制 类型转换

    scala object 转Class Scala强制类型转换   asInstanceOf[T] 将对象类型强制转换为T类型. 还是由于泛型存在类型擦除的原因,1.asInstanceOf[Stri ...

  3. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  4. C++强制类型转换

    C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cas ...

  5. java提高篇(十一)-----强制类型转换

    在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  6. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  7. C++强制类型转换操作符 dynamic_cast

    dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...

  8. C++强制类型转换操作符 const_cast

    const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转 ...

  9. C++强制类型转换操作符 static_cast

    static_cast是一个强制类型转换操作符.强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast.dynamic_cast.const_cast.reinterpert ...

随机推荐

  1. 关于.netFramework概述

    这几天学了不少东西,想来还是应该总结一下,一来自己回顾一下,二来也怕自己忘记,在文章中,有很多东西就是借鉴别人的blog,笔者在这里对他们的无私奉献表示感谢.笔者的语言组织能力有限,如果在文章中出现什 ...

  2. XML.ObjTree -- XML source code from/to JavaScript object like E4X

    转载于:http://www.kawa.net/works/js/xml/objtree-try-e.html // ========================================= ...

  3. 使用FindControl("id")查找控件 返回值都是Null的问题

    做了一个通过字符串ID查找页面控件并且给页面控件赋值的功能,过程中遇到了this.FindControl("id")返回值都是Null的问题,记录一下解决办法. 问题的原因是我所要 ...

  4. UIPickerView(选择控制器) 自学之初体验

    UIPickerView 是一个选择器控件, 它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活.UIPickerView 直接继承了 UIView  ...

  5. HDU 5794 - A Simple Chess

    HDU 5794 - A Simple Chess题意: 马(象棋)初始位置在(1,1), 现在要走到(n,m), 问有几种走法 棋盘上有r个障碍物, 该位置不能走, 并规定只能走右下方 数据范围: ...

  6. IE10以下placeholder不兼容

    做页面的时候在谷歌中是显示的,但是换了IE之后总是不显示,一个文本框还好,如果有多个的话,如图: 添加以下一段Jquery代码: <script> var JPlaceHolder = { ...

  7. mysql 的replace 和replace in to

    1.  mysql 的replace  批量替换 update candidate set education = replace(education,'科','学') where education ...

  8. MYSQL5.6数据库ZIP安装以及VS中使用注意事项

    先挂资源,下载地址: http://download.softagency.net/MySQL/Downloads/. 找到MYSQL5.6,两个版本看系统而定我下的是64位的:http://down ...

  9. 国外大神Leo-G的 DevopsWiki

    https://raw.githubusercontent.com/Leo-G/DevopsWiki/master/README.md 总结的太好了,直接把md文件贴过来好了!慢慢学习!分享给大家,觉 ...

  10. 多个项目使用NET Core

    .NET Core系列 :3 .使用多个项目   通过前面的两篇文章,我们已经知道如何创建新的项目,如何生成并运行我们的应用程序,也知道(大致) project.json 文件中的内容是什么意思.但大 ...