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. JAVA模拟登录实例

    近期在做公司一个web项目.要求在我们的系统上,可以显示其它站点上的数据. 刚開始接到这个任务时,还在想.简单的非常.直接用UrlConection直接进入该网页,然后获取该网页的html,取到想要的 ...

  2. 【树状数组】POJ 2155 Matrix

    附一篇经典翻译,学习 树状数组  http://www.hawstein.com/posts/binary-indexed-trees.html /** * @author johnsondu * @ ...

  3. StringIndexOutOfBoundsException

    <span style="font-family:Microsoft YaHei;font-size:14px;">public class StringIndexBo ...

  4. 配置JBOSS多实例

    在使用Jbossserver时.非常多情况我们须要配置多个实例,以下为大家介绍JBoss里怎样配置多实例,以Jboss5.1为例介绍. 1.复制${JBOSS_HOME}\server\default ...

  5. songtzu的创业产品的经历

    我的产品是关于卡通头像的东东,也有点照片处理app的感觉.你可能会想到脸萌.或者足迹.可是.我自觉得,我比这两者想做的东西要好. 以下的两张是站点首页的效果图. 图片版权与肖像权全部,非授权不得使用. ...

  6. cocos2dx编译安卓版本号查看C++错误

    首先,在Mac以下相关软件路径,打开"终端",然后输入  pico .bash_profile  回车 export COCOS2DX_ROOT=/Users/bpmacmini0 ...

  7. selenium清空默认文字

    默认输入框 鼠标点击上去还有文案 直接用 clear不可以

  8. zoj 3822 Domination 概率dp 2014牡丹江站D题

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  9. Django day14(二) Session

     Session 1. Session干什么用的? 解决cookie不安全的问题, 2. 原理是: 1) 存在服务器上的键值对{'sdaf随机字符串':{name:prince,pwd:123}} 2 ...

  10. python 端口扫描程序

    #! /usr/bin/env python3 #-*- coding:utf-8 -*- import socket import threading OPEN_COUNT = 0 lock = t ...