我是靠谱客的博主 大胆向日葵,最近开发中收集的这篇文章主要介绍对java强制类型转换的一些理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 对java强制类型转换的一些理解
      • 概述
      • 问题的提出
      • 想法的验证

对java强制类型转换的一些理解

概述

qquad 从我这个编程小白来看,java的强制类型转换并不常用。不同于C/C++语言,可以进行int,double等类型之间的强制转换,java是不支持一下格式的:

double a = 3.14;
int b = (int)a;

qquad 并且,java编程中的很多对象之间并没有什么关系,贸然进行强制类型转换很容易使程序抛出异常并终止;一般情况下,只会在对equals方法进行override时才会用到强制类型转换。较少且固定的使用使我们对这个过程的本质并不了解,我们掌握的只是一些固定的用法。只有在遇到一些不能理解的结果时,才会静下心来寻找问题的根源。

问题的提出

​ 我们来看下面这个例子:

class A{
public A(){}
void foo(){
System.out.println("A.bar");
}
}
class B extends A{
public B(){}
@override
void foo(){
System.out.println("B.bar");
}
}
public class test{
public static void main(String[] args){
B b = new B();
((A)b).foo();
}
}

qquad 开始时我以为打印的结果可能是"A.bar",毕竟已经强制类型转换成了A类型的对象,但实际上打印出来的却是"B.bar".

我就开始思考强势类型转换的机制。而这个无外乎有三种可能:

  • 只是将引用转换为A类型
  • 只是将对象转换为A类型
  • 将引用和对象均转换为A类型

想法的验证

qquad 从理论上来看,第二,三种猜想不成立。根据Java override机制可知,如果对象转换的话,那么b在调用函数时会根据实际的对象来进行选择。所以,如果后两种猜想成立的话,最后打印出来的应该是"A.bar"。而getClass函数可以获得object的引用类型,调用此函数并打印,得到A。故第一种猜想成立。

最后

以上就是大胆向日葵为你收集整理的对java强制类型转换的一些理解的全部内容,希望文章能够帮你解决对java强制类型转换的一些理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部