我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java中的类型自动转换机制解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java中的类型自动转换机制解析

类型自动转换机制解析

概述

  • 自动类型转换也叫隐式类型转换
  • 表达式的数据类型自动提升

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

数据类型只会自动提升,不能自动降低

int值可以赋值给long、float、double型变量,不能赋值给byte、short、char型变量

对于函数的传参也是一样

当然,在有函数重载的情况下,java编译器会自动选择最匹配的函数进行调用

Java中整数默认的数据类型是int类型

所有长度低于int的类型(byte、short、char)在运算之后结果将会被提升为int型

当然还有以下的这种情况,这种情况是因为我们在进行赋值运算的时候,java编译器可以明确知道运算的结果是否超过byte或short的取值范围,所以 byte a = 1 + 1; 并没有报错。而上面 byte c = a + b; 编译出错的原因是因为a和b均为一个变量,相加的结果是否会超过byte的取值范围编译器并不知道,所以编译器将结果提升为int型了。

小结一下:

  • 当编译器明确知道整数的运算结果没有到达int的表示范围时,byte、short或char类型的运算结果不会被自动提升为int类型
  • 当编译器明确知道或不清楚整数的运算结果是否到达int的表示范围时,编译器将会自动将运算的结果转换成int,即使原来是byte、short或char类型。

自动类型转换 & 强制类型转换

什么时候会发生类型转换

答: 赋值 | 运算时 ,两边数据类型不一致时就会发生类型转换

如下:

public class TypeTest {
    public static void main(String[] args){
       	// 运算时发生的隐式类型转换,两整数相除得到的还是一个整数
        byte a  = 3;
        byte b = 4;
        int num  =  a + b;
        System.out.println(num); // 7
        // 赋值时发生的隐式类型转换
        int ch = '0';
        System.out.println(ch); // 48
        // 运算时发生的强制类型转换
        byte a1 = 12;
        byte a2 = 12;
        byte num1 = (byte)(a1  + a2);
        System.out.println(num1); // 24
        // 赋值时发生的强制类型转换
        short b3 = 1234;
        byte a3 = (byte) b3;
        System.out.println(a3); // -46
    }
}

运行截图:

在这里插入图片描述

类型转换分类

  • 自动类型转换
  • 强制类型转换

自动类型转换(隐式类型转换)

规则:从小到大 ,低字节向高字节自动提升

顺序:

byte(1字节) – > short(2字节)-- > int(4字节) – > long(8字节) --> float(4字节) – > double(8字节)

char (2字节)-- > int(4字节) – > long(8字节) --> float(4字节) – > double(8字节)

画图分析:

在这里插入图片描述

代码展示:

public class TypeDemo {
    public static void main(String[] agrs){
        // byte -- > short
        byte b1 = 127;
        short s1 = b1;
        System.out.println(s1); // 127
        // short -- > int 
        short  s2 = 30000;
        int i = s2;
        System.out.println(i); // 30000
        // int  -- > long
        int num = 2100000000;
        long lg = num;
        System.out.println(num); // 2100000000
        // long -- > float 
        long lg1 = 200000000000000L;
 	    float f1 = lg1;
        System.out.println(f1);// 2.00000001E14
        // float -- > double 
        float f2 = 3.14f;
        double d1 = f2;
 	    System.out.println(d1); // 3.140000104904175
        // char -- > int
	    char ch = 'a';
        int i1 = ch ;
        System.out.println(i1); // 97
        // char -- > long
        char ch1 = 'b';
        long lg2 = ch1;
        System.out.println(lg2); // 98
        // char  -- >  double
        char ch2 = 'c';
        double dou = ch2;
        System.out.println(dou); // 99.0
        // char -- > float
        char ch3 = 'd';
        float  f3 = ch3;
        System.out.println(f3); // 100.0
    }
}

运行截图:

在这里插入图片描述

注意:

byte、short不能和char进行相互转换

代码展示:

public class TypeDemo2 {
    public static void main(String[] agrs){
 	    // byte -- > char
        byte bt = 127;
        char ch = bt;
        System.out.println(ch);
        // short -- > char
        short sh = 12;
        char ch1 = sh;
        System.out.println(ch1);
    }
}

编译错误截图:

在这里插入图片描述

float虽然是4个字节,但是float比long表示的数据范围更大。说明数据范围的大小和字节的大小不一定相关

代码展示:

public class TypeDemo3 {
    public static void main(String[] agrs){
        long lg = 20000000000000L;
        float f1 = lg;
        System.out.println(f1); // 1.99999997E13
    }
}

运行截图:

在这里插入图片描述

boolean类型不能参与类型转换

代码展示:

public class TypeDemo4 {
    public static void main(String[] agrs) {
        boolean flag = 12;
        int flag1 = flag;
        System.out.println(flag1);
    }
}

编译错误截图:

在这里插入图片描述

强制类型转换(显式类型转换)

规则:从大到小,高字节向低字节手动强制转换

顺序:

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > short (2字节)-- > byte(1字节)

double(8字节) – > float(4字节) – > long(8字节) – > int(4字节) – > char(2字节)

画图分析:

在这里插入图片描述

(掌握)格式:目标数据类型 变量名 = (目标数据类型) 变量 | 常量;

代码展示:

public class TypeDemo5 {
    public static void main(String[] agrs){
        // float -- > long
        // final float  PI = 3.14f;
        // long num = (long) PI; // 3
        // float little =  3.14f;
        // long num = (long)little; // 3
 	    long num = (long)3.14f;      
        System.out.println(num);// 3 
        // double -- > float 
        // double dou = 3.14;
        // float little1 = (float)dou; // 3.14
        //  float little1 = (float) 3.14d;  // 3.14
        final double  dou = 3.14;
        float little1 = (float)dou;
        System.out.println(little1); // 3.14
        // long -- > int 
        // long  num1 = 2000000000000L;
        // int   num2 = (int)num1;  // -1454759936
        // int num2 = (int)2000000000000L; // -1454759936
       	final  long num1 = 2000000000000L;
        int num2 = (int)num1;
        System.out.println(num2);  // -1454759936
        // int --> short
        // int  num3  = 12;
        // short num4 = (short)num3; // 12
        // short num4 = (short)40000; // -25536
        final int num3 = 60;
        short num4 = (short)num3;
        System.out.println(num4); // 60
        // short -- > byte
        final short sh = 12345;
        byte bt = (byte)sh;
        System.out.println(bt); // 57
        short sh1 = 78;
	    bt = (byte) sh1;
        System.out.println(bt); // 78
    }
}

运行截图:

在这里插入图片描述

注意:

强制类型转换有数据丢失,一般不建议使用

代码展示:

public  class TypeDemo6 {
   public static void main(String[] agrs) {
       short a = 1245;
       byte b = (byte)a;
       System.out.println(b);
   } 
}

运行截图:

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java中的类型自动转换机制解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java中类型自动转换机制的示例分析

这篇文章主要介绍了java中类型自动转换机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类型自动转换机制解析概述自动类型转换也叫隐式类型转换表达式的数据类型自动提
2023-06-29

PHP数据类型中自动转换和强制转换的示例分析

这篇文章主要介绍了PHP数据类型中自动转换和强制转换的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是PHP数据类型间的自动转换和强制转换?布尔值的自动类型转换:
2023-06-15

全面解析 PHP 类型自动转换,解除数据转换障碍

php 中的类型自动转换机制允许值隐式转换为不同类型。规则包括:整数、浮点数可转为布尔值;整数、浮点数可转为字符串;布尔值可转为整数。常见用例有:比较不同类型值、使用布尔值作为条件、将变量转换为特定类型。它有助于减少编码工作量,但需要注意潜
全面解析 PHP 类型自动转换,解除数据转换障碍
2024-04-09

Java怎么自定义强制类型转换

在Java中,可以使用自定义方法来实现强制类型转换。下面是一个示例:```javapublic class MyClass {public static void main(String[] args) {double number = 3
2023-09-27

PHP 函数的类型提示和自动类型转换

php 类型提示可声明函数的期望参数和返回类型,以避免类型错误。它还提供自动类型转换,在转换失败时抛出类型错误。这些特性增强了代码可读性,减少了错误,并提高了编译器错误检测能力,如在验证信用卡号码的示例中所示。PHP 函数的类型提示和自动类
PHP 函数的类型提示和自动类型转换
2024-04-27

C++中Operator类型强制转换成员函数解析

转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型
2022-11-15

PHP中的隐式转换机制解析

PHP中的隐式转换机制解析在PHP编程中,隐式转换是指在不显式指定类型转换的情况下,PHP自动将一个数据类型转换为另一个数据类型的过程。隐式转换机制在编程中非常常见,但也容易造成一些意想不到的bug,因此了解隐式转换机制的原理和规则对于编
PHP中的隐式转换机制解析
2024-03-09

C++中的强制类型转换操作详解

C++中提供了四种强制类型转换技术:static_cast、dynamic_cast、reinterpret_cast和const_cast。这些技术能够在需要时将一种类型转换为另一种类型,但需要注意它们的适用条件和安全性。程序员需要根据具体情况选择合适的强制类型转换方式,以确保程序的正确性和可靠性
2023-05-17

探究Golang类型转换的底层机制

Golang语言作为一种静态类型语言,类型转换是程序中常见的操作之一。通过类型转换,可以在不同类型之间进行数据的转换和传递,实现更加灵活的编程逻辑。本文将深入探讨Golang类型转换的实现原理,并给出具体的代码示例。1. Golang类型
探究Golang类型转换的底层机制
2024-02-24

java泛型数组转换类型的示例分析

小编给大家分享一下java泛型数组转换类型的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据
2023-06-14

Oracle变量与数据类型的自动转换

在Oracle数据库中,变量与数据类型的自动转换是根据一定的规则进行的,这些规则可能会导致一些不可预测的结果,特别是在日期类型的处理过程中。以下是关于Oracle变量与数据类型的自动转换的相关信息:Oracle自动类型转换规则数值类型:当
Oracle变量与数据类型的自动转换
2024-08-27

Java数据类型转换的示例分析

这篇文章将为大家详细讲解有关 Java数据类型转换的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Java数据类型转换1.Java的简单类型及其封装器类⑴Java简单类型与封装类我们知道,Jav
2023-06-17

浅析JavaScript中的隐式类型转换

在我们学习或者工作中,或多或少会遇到过隐式类型转换,但是为什么会有这种现象?这种现象背后的原理是什么?可能是大多数人没有思考过的,本文就来和大家一起浅析一下
2023-03-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录