• 基本类型转换和引用类型转换



    前言

    提示:这里可以添加本文要记录的大概内容:

    Java 中的类型转换可以分为基本类型转换和引用类型转换两种。
    基本类型转换指的是将一种基本数据类型转换为另一种基本数据类型,例如将 int 类型转换为 double 类型。
    引用类型转换则指的是将一个引用类型转换为另一个引用类型,例如将一个 Object 类型的对象转换为一个 String 类型的对象。在这里插入图片描述

    基本数据类型和引用数据类型作为参数传入方法,区别是什么?

    基本数据类型作为参数传入方法,是值传递,方法内部针对传入值的操作,不会直接影响之前数据的值。

    引用数据类型作为参数传入方法,是地址传递,方法内部针对传入值的操作,会直接影响之前数据的值。


    提示:以下是本篇文章正文内容,下面案例可供参考

    基本数据类型转换

    Java数据类型转换是将一种数据类型的值转换为另一种数据类型的值。在Java中,数据类型转换可以分为两种:自动转换和强制转换。

    ①、自动转换是指将一个小的数据类型转换为一个大的数据类型

    例如将byte类型转换为int类型。在这种情况下,Java会自动将小的数据类型转换为大的数据类型,不需要进行任何额外的操作。

    byte、short、char 类型可以自动转换int 类型。
    int 类型可以自动转换long 类型。
    float 类型可以自动转换double 类型。

    ②、强制转换是指将一个大的数据类型转换为一个小的数据类型

    例如将int类型转换为byte类型。在这种情况下,Java需要进行强制转换,也就是使用类型转换运算符(如(int)x)将大的数据类型转换为小的数据类型。

    需要注意的是,当进行强制转换时,可能会发生数据丢失。

    Java基本语法中的基本数据类型中写过这些类型,但是除boolean类型外,其他的七种类型之间可以相互转换

    数据类型的自动转换顺序图:
    在这里插入图片描述
    整数整体小于小数,因为小数有小数点,精确度更高

    自动数据类型转换

    小类型转大类型就是自动转换,在代码中不需要增加额外代码

    //小类型的数据赋值给大类型的变量
    int x = 10;
    double y = x; //自动转换
    System.out.println(d);
    
    //在一个运算公式中出现多种类型数据
    //先将数据转换成公式中最大类型
    byte a = 0;
    int b = 0;
    float c = 1.1f;
    		
    float x = a+b+c;//因为float是这里面的最大类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    强制数据类型转换

    需要增加额外代码

    小范围 = (小范围)大范围值

    //大类型的数据赋值给小类型
    //强制类型在赋值时,在数据前加上(要转换的目标类型)
    //强制类型转换会丢失原数据的某一部分
    int a = 1000;
    byte b = (byte)a;
    		
    System.out.println(b);
    
    double a = 10.5;
    int b = (int)a;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    byte、short、char之间不会相互转换,它们三者在计算时首先会转换为int类型;

    引用数据类型转换

    紧接上一篇:Java接口

    向上转型

    向上转型是指将一个子类的对象转换为其父类的对象。
    Java 中的向上转型是安全的,不需要使用强制类型转换符,编译器会自动进行转换

    【例】猫和老鼠

    1. 先定义一个父类,这里用动物类作为父类
    public class Animal {
    //父类
    	public void sleep() {
    		System.out.println("睡觉最重要");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 再定义一个子类,这里用Cat类作为子类
    public class Cat extends Animal{
    //子类
    	public void catchMouse() {
    		System.out.println("猫抓老鼠");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 定义一个接口实现类
    public interface Flayable {
    //接口
    	void flying();
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 接下来就是实现类
    public class Tom implements Flayable{
    
    	@Override   //自动生成(添加未实现的方法)
    	public void flying() {
    		System.out.println("汤姆想飞上树");
    		
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 转换测试

    引用类型之间必须有继承或实现关系才能互相转换
    父类型和接口类型 高 上 大
    子类型和实现类型 低 下 小

    向上转型:直接赋值
    不能调用子类或实现类增加的方法
    只能调用父类或接口中定义的方法

    public class 转换测试 {
    	public static void main(String[] args) {
    
    		Animal animal = new Cat(); 
    		animal.sleep();		
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    但是在写catchMouse()方法时没有提示,也就是说不允许调用

    于是在Tom实现类中再写一个方法

    public void beatDog() {
    		System.out.println("汤姆收拾斯派克");
    	}
    
    • 1
    • 2
    • 3

    回到测试类写一个接口和实现类之间的互相转型,先定义大类型

    public class 转换测试 {
    	public static void main(String[] args) {
    
    		Animal animal = new Cat(); 
    		animal.sleep();
    		
    		//先定义大类型
    		Flayable flayable = new Tom();
    		flayable.flying();
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    向下转型

    向下转型是指把大的给小的,把上的给下的
    Java 中的向下转型是不安全的,需要使用强制类型转换符进行转换。
    在进行向下转型时,需要注意该对象实际所属的类型,否则可能会导致 ClassCastException 异常的发生

    向下转型时需要加小括号 (目标类型)

    在测试类中添加:

    //向下转型 需要加小括号 (目标类型)
    Cat cat = (Cat) animal;
    		
    Tom tom = (Tom) flayable;
    tom.beatDog();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    将强制类型转换添加至"XXX"(自动生成在这里插入图片描述

  • 相关阅读:
    2021年度总结 | 葡萄城软件开发技术回顾(下)
    使用Nginx进行负载均衡
    二种方法轻松提取音频中的钢琴声音
    Java实现PDF文字内容识别,结合OCR实现PDF图片实现
    【iOS】——知乎日报第三周总结
    初级软件测试面试题哪里可以刷?新发现的这个在线题库,值得一试
    3.4 设置环境变量MAKEFILES
    vue3 antd 表单校验与重置
    Java8 stream处理List,Map总结
    JS基本数据类型中null和undefined区别及应用
  • 原文地址:https://blog.csdn.net/rej177/article/details/131125671