1.自动类型转换

java所有的数值型变量都可以相互转换,如果系统支持把某种基本类型的值直接付赋给另一个基本类型的变量,则这种方式被称为自动类型转换。

当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换;否则需要强制类型转换。

——《疯狂Java讲义第4版》

图1 自动类型转换图

图1中,表数范围小的可以向表数范围大的进行自动类型转换。下面,我们来进行代码示范:

public class ConversionDemo {
    public static void main(String[] args) {
        byte b = 88;
        // byte类型可以自动转换为int类型
        float f = b;
        // 下面将输出88.0
        System.out.println();
        byte e = 8;
        // 下面代码将出错,byte类型的数值范围比char类型的数值范围小
        // char c=e;
        char c = 65;
        // 因为double类型的数值范围比char大,下面代码将输出65.0
        double d = c;
        System.out.println(d);
    }
}

不仅如此,当任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型。
如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串使用+进行拼接。

int a = 5;
String s = a + "" ;
//输出的是"5",而不是5
System.out.println(s);

2.强制类型转换

如果希望大数值类型转换为小数值类型,则必须进行强制类型转换。
在进行强制类型转换时,在被转换的值的类型前加上( ),并在其中写出要强转的类型。
当进行强制转换类型的时候,就类似将大瓶子里的水灌入小瓶子中,如果大瓶子是装满了水的,那么必然会有有流出来,我们称之为溢出,从而,造成数据丢失。

public static void main(String[] args) {
    int iValue = 233;
    // 强制把一个int类型的值转换为byte类型的值
    byte bValue = (byte) iValue;
    // 将输出-23
    System.out.println(bValue);

    double dValue = 3.98;
    // 强制把一个double类型的值转换为int
    int tol = (int) dValue;
    // 将输出3
    System.out.println(tol);
}

3.表达式类型的自动提升

当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。

  • 所有的byte类型、short类型和char类型将被提升到int类型。
  • 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型,代码示例如下:
public class AutoPromote {

    public static void main(String[] args) {
        byte b = 40;
        char c = 'a';
        int i = 23;
        double d = .314;
        // 下面表达式中在最高等级操作数为d(double型)
        // 则下面表达式的类型为double型,故赋给一个double型变量
        double result = b + c + i * d;
        // 将输出144.222
        System.out.println(result);

        int val = 3;
        // 下面表达式中2个操作数都是int,故右边表达式的类型为int
        // 因此,虽然23/3不能除尽,依然得到一个int整数
        int intResult = 23 / val;
        System.out.println(intResult); // 将输出7
        // 如果表达中包含了字符串,则当把加号放在字符串和基本类型值之间时,
        // 这个加号是一个字符串连接运算符,而不是进行加法运算,如下代码所示

        // 输出字符串Hello!a7
        System.out.println("Hello!" + 'a' + 7);
        // 输出字符串104Hello!
        System.out.println('a' + 7 + "Hello!");
    }
}

参考资料

  • 《疯狂Java讲义第4版》

Java基本类型转换的更多相关文章

  1. Java 基础类型转换byte数组, byte数组转换基础类型

    Java 基础类型转换byte数组, byte数组转换基础类型 Java类型转换 java类对象转化为byte数组

  2. Java数据类型转换浅析

    Java数据类型转换分为两种:自动类型转换和强制类型转换. 数据类型转换的关键是数据类型相应的表数范围大小 1.自动类型转换: 概念:小范围数据类型会自动转化成大范围数据类型 实例: int a=10 ...

  3. 关于Java String 类型转换时null的问题(转)

    关于Java String 类型转换时null的问题 开发中经常遇到从集合类List.Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPoi ...

  4. Java的类型转换

    Java的类型转换 在适当的时候,我们会想要将一种数据类型自动转换成另一种,比如把int转化成float类型.Java有隐藏式的自动转换,可以自动转换成想要的类型,但是强制的自动转换的话,.需要将希望 ...

  5. Java byte类型转换成int类型时需要 & 0XFF的原因

    Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b  = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...

  6. Java里面类型转换总结

    1.String 转 int int i = Integer.valueOf(my_str).intValue(); int i = Integer.parseInt(str); 2.String 转 ...

  7. JAVA强制类型转换(转载+自己的感想) - stemon

    JAVA强制类型转换(转载+自己的感想) - stemon 时间 2013-10-29 15:52:00  博客园-Java原文  http://www.cnblogs.com/stemon/p/33 ...

  8. Java数据类型转换1

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  9. Java List 类型转换

    java的类型转换让人忍不住在开始编码前骂一声  FUCK! 1  子类转父类 up List<SubClass> subs = ...; List<? extends BaseCl ...

  10. Java String类型转换成Date日期类型

    插入数据库时,存入当前日期,需要格式转换 import java.text.SimpleDateFormat; formatter = new SimpleDateFormat( "yyyy ...

随机推荐

  1. [React Testing] Confidently Ship Production React Apps

    We want to make sure that when we ship new code, our users can use the application. The best way we' ...

  2. Oracle 自己主动内存管理 SGA、PGA 具体解释

    ASMM自己主动共享内存管理: 自己主动依据工作量变化调整 最大程度地提高内存利用率 有助于消除内存不足的错误 SYS@PROD>show parameter sga NAME          ...

  3. php file_get_contents遇到https的处理办法

    最近调整了文件上传后的资源路径,导致pageOffice在线编辑功能无法正常使用,每一次打开文件都报错:该文件为0字节.仔细看了一下程序,整理逻辑流程如下图: 增加日志后发现,保存在服务器路径下的该条 ...

  4. 开源 java CMS - FreeCMS2.3 职位管理

    项目地址:http://www.freeteam.cn/ 职位管理 管理职位.实现招聘功能. 1. 职位管理 从左側管理菜单点击职位管理进入. 2. 加入职位 在职位列表下方点击"加入&qu ...

  5. vijos - P1279Leave-绿光(数学归纳法 + python)

    P1279Leave-绿光 Accepted 标签:[显示标签] 背景 期待这一份幸运,和一份冲劲,多么奇异的际遇--. 燕姿在演唱完绿光这首歌后,出给了姿迷一个考题. 北欧有一个传说! 人一生中能看 ...

  6. springboot + rabbitmq 整合示例

    几个概念说明:Broker:简单来说就是消息队列服务器实体.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列.Queue:消息队列载体,每个消息都会被投入到一个或多个队列.Bindi ...

  7. git 拉取和获取 pull 和 fetch 区别【转】

    本文转载自:http://blog.csdn.net/u010094934/article/details/52775653 使用git  直接提交的话   直接 push 获取最新版本  有两种   ...

  8. poj 2763(在线LCA+树状数组)

    Housewife Wind After their royal wedding, Jiajia and Wind hid away in XX Village, to enjoy their ord ...

  9. bzoj 4318 OSU! —— 期望DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4318 期望DP,因为平方的期望不等于期望的平方,所以用公式递推: 第一次推错了囧,还是看这位 ...

  10. GStreamer系列 - 基本介绍

    什么是Gstreamer? Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤 ...