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. 基于Windows Azure 安装 SharePoint 2010简体中文语言包

    在Windows Azure上安装的Windows Server默认是英文版本的,当时安装的SharePoint也是英文版的,为方便使用,决定安装中文的语言包,具体过程如下: 1. 安装 Window ...

  2. Ubuntu下在Eclipse IDE for C/C++ Developers中怎样执行C语言的GTK程序?(已解决)

    (已解决.详见Ubuntu 12.04下在Eclipse IDE for C/C++ Developers中执行C语言的GTK程序) 按"Ubuntu下GTK的安装.编译和測试"( ...

  3. Codeforces Round #332 (Div. 2) B. Spongebob and Joke 模拟

    B. Spongebob and Joke     While Patrick was gone shopping, Spongebob decided to play a little trick ...

  4. C# winform窗体在桌面右下角显示(任务栏上方)

    问题描述: 有一个主窗口程序,需要给该程序添加一个通知子窗口.子窗口的位置为右下角. 解决方法: 在子窗口frmPopMsg的代码文件中添加如下代码: public frmPopMsg() { Ini ...

  5. C# 验证数字的正则表达式集

    验证数字的正则表达式集 博客分类: 正则 正则表达式 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d ...

  6. hdu 2988(最小生成树 kruskal算法)

    Dark roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. bzoj2303

    并查集+数学 这道题网上好像有两种解法. 这位写的很可读:http://blog.csdn.net/unicornt_/article/details/51901225 然后看完大概就懂了做法,但是实 ...

  8. Python 41 多表查询 和 子查询

    1.查询             完整的查询语句             select [distinct] {* | 字段 | 聚合函数 | 表达式}from 表名                 ...

  9. springboot+webmagic实现java爬虫jdbc及mysql

    前段时间需要爬取网页上的信息,自己对于爬虫没有任何了解,就了解了一下webmagic,写了个简单的爬虫. 一.首先介绍一下webmagic: webmagic采用完全模块化的设计,功能覆盖整个爬虫的生 ...

  10. JAVA 中进行网络通信时,通信的程序两端要传输的对象,不仅要序列化,而且这个对象所属的类的名字要完全一样,连包的名字都得一样

    如上图项目目录,这是一个简易的QQ,客户端登录的时候要传输用户信息到服务器验证,所以两端都会用到User类的对象,但一开始我在Server端的包名是com.qq.server.common,两端的报名 ...