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和MySQL乱码问题

    近期我们使用tomcat和MySQL搭建了一个Java Webserver,并将游戏的server逻辑部署在该server上. 游戏上线后不久,我们发现数据库中出现了大量的乱码.这是个很严重的问题,因 ...

  2. 摘:SQL 常见题练习

    --.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --.课程表 Course(CId,Cnam ...

  3. java的死锁学习

    学习java的死锁写的代码 也是看书上的然后自己敲了一个 <span style="font-size:18px;">package synchronization.j ...

  4. Android+Jquery Mobile学习系列(2)-HTML5/Jquery Mobile基础

    本章介绍两个关键字[HTML5]和[Jquery Mobile],简单说这两者的关系是:HTML5作为主体,Jquery Mobile在HTML5的基础上对其进行了优化.装饰. HTML5 HTML5 ...

  5. EOJ 3023 字符组合

    3.30更新 #include <iostream> #include <stdio.h> #include <algorithm> #include <se ...

  6. A Round Peg in a Ground Hole(圆与凸包)

    http://poj.org/problem?id=1584 题意:判断所给的点能不能形成凸包,并判断所给的圆是否在凸包内. 改了好几天的一个题,今天才发现是输入顺序弄错了,办过的最脑残的事情..sa ...

  7. Appium + python - automator定位操作

    # coding:utf-8from appium import webdriverfrom time import sleep desired_caps = { 'platformName': 'A ...

  8. Apache 虚拟主机 配置方法

    打开httpd.conf文件 去掉LoadModule vhost_alias_module modules/mod_vhost_alias.so前面的#号 去掉Include conf/extra/ ...

  9. Oracle 数据导入导出(imp/exp)

    环境:windows下,oracle11g 1.启动oracle服务 net start OracleDBConsoleorclnet start OracleOraDb11g_home1TNSLis ...

  10. windows phone控件

    常用控件: 包括: Button控件.CheckBox控件.HyperlinkButton控件.Iamege控件.ListBox控件.PasswordBox控件.ProgressBar控件.Radio ...