`
Scliu123
  • 浏览: 41389 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(转换基础类型)

阅读更多
package book.basic;

public class ChangeBasicType {

 /**
  * 基本类型的自动提升
  * 自动提升规则:
  *   1,所有的byte 型和short型的值被提升到 int 型
  *  2,如果一个操作数是long 型,整个表达式将被提升到long 型
  *   3,如果一个操作数是float 型,整个表达式将被提升到float 型
  *   4,如果有一个操作数是double 型,计算结果就是double 型
  */
 private void typeAutoUpgrade() {
  byte b = 44;
  char c = 'b';
  short s = 1024;
  int i = 40000;
  long l = 12463l;
  float f = 35.67f;
  double d = 3.1234d;
  //(f * b)时,b自动提升为float类型,(l * f)时,l自动提升为float,
  //(i / c)时,c自动提升为int型,(d * s)时,s自动提升为double
  //再相加时,中间结果都变为double类型。这里result只能声明为double类型。
  //result声明为其他类型会出错,除非,进行强制类型转换
  double result = (f * b) + +(l * f) + (i / c) - (d * s);
  System.out.print((f * b) + " + " + (l * f) + " + " + (i / c) + " - "
    + (d * s));
  System.out.println(" = " + result);
 }

 /**
  * 基本类型的自动转换
  * 自动转换发生的条件是:(1)两种类型是兼容的;(2)目标类型的范围比源类型的范围大。
  * 其他情况下,必须进行强制类型转换
  */
 private void autoChange() {
  char c = 'a';
  byte b = 44;
  short s0 = b;
  int i0 = s0;
  int i1 = c;
  long l = i0;
  float f = l;
  double d = f;
  System.out.print("c = " + c + "; b = " + b + "; s0 = " + s0);
  System.out.print("; i0 = " + i0 + "; i1 = " + i1 + "; l = " + l);
  System.out.println("; f = " + f + "; d = " + d);

  //当float类型转换成double时,会出现不相等的情况,这是因为,float的范围是32位,而double的范围是64位,在进行类型转换时,
  //操作的实际上都是二进制,有些实数用二进制能够精确表示,而有些实数无论用多少位二进制都无法表示,跟有理数和无理数的概念一样。
  //对不能够精确表示的实数进行类型转换时,会出现不相等的情况。
  float fl = 1.7f;
  double dou = fl;
  System.out.println("fl = " + fl + "; dou = " + dou);//fl = 1.7; dou = 1.7000000476837158
  //但是当把一个数从一种类型转换成另外一种类型,再转换回来时,值还是一样。
  fl = (float)dou;
  System.out.println("fl = " + fl + "; dou = " + dou);
 }

 /**
  * 强制类型转换
  * 当两种类型不兼容,或者目标类型范围比源类型范围小时,必须进行强制类型转换。
  * 具体转换时会进行 截断、取模 操作。
  */
 private void forceChange() {
  double d = 123.456d;
  float f = (float) d;
  long l = (long) d;
  int i = (int) d;
  short s = (short) d;
  byte b = (byte) d;

  System.out.print("d = " + d + "; f = " + f + "; l = " + l);
  System.out.println("; i = " + i + "; s = " + s + "; b = " + b);

  d = 567.89d;
  //下面的转换首先进行截断操作,将d的值变为567,又因为567比byte的范围256还大,于是进行取模操作,
  //567对256取模后的值为55
  b = (byte) d;
  System.out.println("d = " + d + "; b = " + b);
 }

 public static void main(String[] args) {
  ChangeBasicType test = new ChangeBasicType();
  test.typeAutoUpgrade();
  test.autoChange();
  test.forceChange();
 }
// fl = 1.7; dou = 1.7000000476837158
// fl = 1.7; dou = 1.7000000476837158
}

 

分享到:
评论

相关推荐

    JDK_API_1_6.rar

    4. **自动装箱/拆箱**:自动将基本类型与对应的包装类之间转换,简化了代码。 5. **NIO.2**:引入了新的文件系统API,提供了更强大的文件操作能力,如异步I/O和路径操作。 6. **改进的垃圾收集**:对垃圾回收机制...

    JDK_API_1_6

    DataOutput DataOutput 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流。 Externalizable Externalizable 实例类的唯一特性是可以被写入序列化流中,该类负责保存和恢复实例内容。...

    JDK_API_1_6.rar_JDK API_JDK_API_1_6

    1. **基本类型与类**:在JDK API 1.6中,基础类型如int、char、boolean有对应的包装类,如Integer、Character和Boolean。此外,Object是所有类的基类,它提供了诸如equals()、hashCode()和toString()等通用方法。 2...

    JDK_API学习文档

    9. **枚举**:Java 5引入的枚举类型,用于表示有限集合的常量,提供了一种类型安全的方式来创建有限的、不可变的类实例。 10. **注解**:`java.lang.annotation`包中的注解(Annotation)是一种元数据,可以为...

    jdk_API_1.8中文版

    在类型推断方面,JDK 1.8改进了泛型的使用体验,允许在实例化匿名内部类时省略类型参数,编译器会自动推断出正确的类型。 在集合框架方面,`Map`接口新增了`forEach`方法,支持使用Lambda表达式进行迭代操作,同时`...

    jdk1.7.0_80.zip

    5. **菱形运算符**:在创建匿名内部类或泛型实例时,可以省略类型参数,编译器会自动推断类型,如`new ArrayList()`。 6. **异常处理**:引入了`try-with-resources`语句,可以自动关闭实现了`AutoCloseable`接口的...

    zhuang_jdk_jre_jse7.7z

    JRE是Java程序运行的基础,而JDK则为开发者提供了开发、测试和调试Java应用的全套工具。在实际应用中,用户只需安装JRE即可运行Java应用程序,而开发者需要安装JDK来进行开发工作。 4. Java 7的特性 Java 7(也...

    JDK_API_1_6_zh_CN中文版

    1. **Java语言基础**:JDK API文档首先介绍了Java语言的基本语法,包括数据类型、变量、运算符、控制结构(如if语句、for循环、while循环)、方法、类和对象等概念。 2. **面向对象编程**:文档深入讲解了面向对象...

    JDK_API_1.6.zip

    JDK 1.6中的Java基础部分主要涉及Java语言的基本语法、数据类型、控制结构、异常处理、多线程和输入输出等核心概念。这些内容构成了Java程序的基础框架,理解和掌握它们是成为一名合格Java程序员的第一步。 1. 类与...

    jdk1.5.0_11

    1. **泛型(Generics)**:泛型是JDK 5.0引入的一项重要特性,允许在类、接口和方法中使用类型参数,提高了代码的类型安全性,减少了强制类型转换。 2. **枚举(Enums)**:枚举是预定义的常量集合,提供了比原始...

    jdk1.5.0_12源代码

    自动装箱和拆箱使得基础类型与它们对应的包装类之间的转换变得无缝。在JDK1.5.0_12的源代码中,可以看到编译器如何处理这种转换,例如,当基本类型与包装类进行操作时,编译器会自动添加装箱和拆箱的操作。 4. **...

    jdk1.5.0_12.zip

    JDK是Java语言的基础,它包含了编译器、调试器、Java运行环境(JRE)以及各种工具,使得开发者能够编写、测试和部署Java应用。 1. **Java语言特性**:JDK 1.5(也称为Java SE 5.0)引入了一些重大的语言改进,包括...

    jdk_1_5_0-API_CN 请大家下载查看此文件

    JDK 1.5.0实现了自动装箱与拆箱,使得基本类型和对应的包装类之间可以无缝转换,减少了类型转换的错误和冗余代码。 六、遍历循环 `for-each`循环,也称为增强for循环,简化了遍历集合、数组和其他迭代器支持的数据...

    java JDK 实例开发宝典

    Java JDK实例开发宝典是一本全面深入探讨Java开发工具包(Java Development Kit)的实践指南。JDK是Java编程的基础,包含了编译器、运行环境、调试工具和其他实用工具,对于任何想要学习或精通Java编程的开发者来说...

    java jdk 实例宝典(光盘源码)

    Java JDK实例宝典是一本深度探讨Java开发工具集(Java Development Kit)的实践性书籍,其光盘源码为读者提供了丰富的示例代码,便于学习和理解。这本书旨在帮助Java开发者深入掌握JDK中的核心概念和技术,提升编程...

    jdk1.5.0_04

    5. **变量类型推断(Type Inference for Generic Instance Creation)**:在创建泛型实例时,编译器可以自动推断类型参数,减少了冗余的类型声明。 6. **可变参数(Varargs)**:允许函数接受可变数量的参数,通过...

    jdk1.8.0_91.rar

    Java JDK(Java Development Kit)是Java编程语言的软件开发工具包,对于任何想要编写、编译、调试和运行Java应用程序的开发者来说,它是基础性的工具集合。JDK 1.8.0_91是Oracle公司发布的一个特定版本,包含了Java...

    [Java参考文档].JDK_API_1_6_zh_CN.zip

    9. **泛型**:JDK 1.5引入的泛型提高了代码的类型安全性,允许在集合和其他容器中指定元素的类型,避免了强制类型转换。 10. **枚举(Enum)**:枚举是一种特殊的类,用于表示有限的固定值集合。它提供了比常量更...

    Java JDK_API1.6、1.8、1.9中文文档下载.7z

    - **Java数据库连接(JDBC)4.0**:增强了数据库连接,提供自动类型转换和统一的元数据查询。 2. Java JDK 1.8(也称为Java 8): - **Lambda表达式**:引入了函数式编程的概念,简化了多线程编程和处理集合数据。 ...

    JDK_API1.7

    - **钻石运算符**:在创建带泛型的匿名类实例时,编译器可以自动推断类型,如`new ArrayList()`。 - **二进制字面量**:可以直接使用二进制前缀`0b`来表示二进制数字,如`0b1010`。 - **多路归约**:`Stream` API中...

Global site tag (gtag.js) - Google Analytics