`

Java类型转换与强制类型转换

 
阅读更多

    Java不需要sizeof()运算符来查看不同类型在不同机器上的大小,因为所有数据类型在所有机器的大小都是相同的。

    如果你以前有编程经验,那么你已经知道把一种类型的值赋给另外类型的一个变量是相当常见的。如果这2种类型是兼容的,那么Java 将自动地进行转换。例如,把int 类型的值赋给long 类型的变量,总是可行的。然而,不是所有的类型都是兼容的,因此,不是所有的类型转换都是可以隐式实现的。例如,没有将double 型转换为byte 型的定义。幸好,获得不兼容的类型之间的转换仍然是可能的。要达到这个目的,你必须使用一个强制类型转换,它能完成两个不兼容的类型之间的显式变换。让我们看看自动类型转换和强制类型转换。

3.9.1 Java 的自动转换
    如果下列2个条件都能满足,那么将一种类型的数据赋给另外一种类型变量时,将执行自动类型转换(automatic type conversion):

    ·这2种类型是兼容的。

    ·目的类型数的范围比来源类型的大。
    当以上2个条件都满足时,拓宽转换(widening conversion )发生。 例如,int 型的范围比所有byte 型的合法范围大,因此不要求显式强制类型转换语句。
    对于拓宽转换,数字类型,包括整数(integer )和浮点(floating-point )类型都是彼此兼容的,但是,数字类型和字符类型(char)或布尔类型(bollean )是不兼容的。字符类型(char )和布尔类型(bollean )也是互相不兼容的。

 

    当运算中的不同元素是不同类型时,也进行“拓宽转换(widening conversion)”

	public static void main(String[] args) {
		byte b=3;
		int i=257;
		
		System.out.println(b);		//3
		System.out.println(i);		//257
		System.out.println(b+i);	//260
		
		double d=0.4;
		System.out.println(i+d);	//257.4
	}


3.9.2 不兼容类型的强制转换
    尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果你需要将int 型的值赋给一个byte 型的变量,你将怎么办?这种转换不会自动进行,因为byte 型的变化范围比int 型的要小。强制转换有时称为“缩小转换” ,因为你肯定要将源数据类型的值变小才能适合目标数据类型。
    为了完成两种不兼容类型之间的转换,你就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换。它的通用格式如下:
    (target-type)value
    其中,目标类型(target-type )指定了要将指定值转换成的类型。例如,下面的程序段将int 型强制转换成byte 型。如果整数的值超出了byte 型的取值范围,它的值将会因为对byte 型值域取模(整数除以byte 得到的余数)而减少。


    int a;
    byte b;
    // ...  
    b = (byte) a;


    当把浮点值赋给整数类型时一种不同的类型转换发生了:截断(truncation )。你知道整数没有小数部分。这样,当把浮点值赋给整数类型时,它的小数部分会被舍去。 例如,如果将值1.23赋给一个整数,其结果值只是1,0.23 被丢弃了。当然,如果浮点值太大而不能适合目标整数类型,那么它的值将会因为对目标类型值域取模而减少。

    下面的程序说明了强制类型转换:

// Demonstrate casts.
class Conversion {

public static void main(String args[]) {
    byte b;
    int i = 257;
    double d = 323.142;

    System.out.println(" Conversion of int to byte.");
    b = (byte) i;
    System.out.println("i and b " + i + " " + b);

    System.out.println(" Conversion of double to int.");
    i = (int) d;
    System.out.println("d and i " + d + " " + i);

    System.out.println(" Conversion of double to byte.");
    b = (byte) d;
    System.out.println("d and b " + d + " " + b);
    }
}

    该程序的输出如下:

Conversion of int to byte.
i and b 257 1

Conversion of double to int.
d and i 323.142 323

Conversion of double to byte.
d and b 323.142 67


    让我们看看每一个类型转换。当值257被强制转换为byte 变量时,其结果是257除以256 (256是byte 类型的变化范围)的余数1。当把变量d转换为int 型,它的小数部分被舍弃了。当把变量d转换为byte 型,它的小数部分被舍弃了,而且它的值减少为256 的模,即67。

 

**********************************************************************************

总结:

    1. Java不需要sizeof()运算符来查看不同类型在不同机器上的大小,因为所有数据类型在所有机器的大小都是相同的。

    2. 自动转换 ,包括赋值和运算时的转换(你懂的),均采用拓宽转换 ,尽可能地将运算变得更精确;

    3. 强制转换 ,是没办法的转换,采取“截断”和“取模”的策略。

分享到:
评论

相关推荐

    27.java强制类型转换.zip

    27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型...

    java 强制类型转换示例

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个兼容的数据类型的过程。这通常发生在处理不同类型的变量或对象之间需要交互的情况。在Java中,有两种类型的转换:自动类型转换(隐式转换)和强制类型...

    java 常用基础类型之强制转换

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个数据类型的语法操作。这通常发生在需要将数值从精度较高的类型转换为精度较低的类型,或者在处理对象时需要明确指定子类对象为父类类型的情况。在“java...

    实例022 - 自动类型转换与强制类型转换

    需要注意的是,强制类型转换可能会导致运行时错误,如果转换的对象实际类型与指定的目标类型不符,将会抛出`ClassCastException`。 在实际开发中,源码分析和工具的使用有助于理解这些转换如何在代码中实现。通过...

    JAVA类型转换[文].pdf

    - **强制类型转换**:从高级别类型转换到低级别类型可能需要手动进行,但可能导致数据溢出或精度损失。例如: ```java int i = 100; byte b = (byte) i; // 强制转换,可能会溢出 ``` - **包装类过渡**:可以...

    深入分析java中的类型转换

    在Java中,类型转换主要分为两大类:**隐式自动类型转换**和**强制手动类型转换**。 #### 隐式自动类型转换 隐式自动类型转换指的是Java编译器自动完成的类型转换过程。这种类型的转换通常发生在较小的数据类型向较...

    Java中强制类型转换共2页.pdf.zip

    本篇文章将详细探讨Java中的强制类型转换,这是Java编程中不可或缺的知识点。 Java的类型系统分为两大类:基本类型(如int、char、boolean等)和引用类型(如类、接口实例)。在进行类型转换时,Java有自动类型转换...

    java之java类型转换

    Java 类型转换 Java 类型转换是 Java 编程语言中的一部分,它是 Java 编程的基础,但很多时候偏偏就会在这样的基础...因此,程序员需要了解 Java 中的类型转换规则,正确地使用自动转换和强制转换来提高程序的质量。

    JAVA类型转换.pdf

    - 当一个较大的数据类型被赋值给一个较小的数据类型时,需要使用强制类型转换。强制类型转换的语法是在变量前加上目标类型。例如,将一个double类型的值赋值给一个int类型的变量,需要写成:(int) doubleValue。 -...

    java类型转换大全

    3. **强制类型转换**:当需要将大类型转换为小类型时,需要使用强制类型转换。例如,`(byte)(intValue)`将int转换为byte。但是需要注意,可能会导致数据丢失或溢出。 4. **包装类与基本类型转换**:Java提供了八种...

    JAVA数据类型转换.pdf

    无论是自动类型转换还是强制类型转换,亦或是通过包装类进行转换,都需要开发者根据实际情况选择最合适的转换方式。此外,字符串与其他数据类型之间的转换也非常重要,尤其是在处理用户输入或显示数据时。通过学习和...

    编程语言java类型转换.pdf

    这一过程分为两种类型,分别是自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。在阅读了“编程语言java类型转换.pdf”的部分内容后,我们可以提炼出以下关于Java类型转换的知识点。 1. Java数据类型...

    Java中类型转换.pdf

    本文介绍了 Java 中的自动类型转换和强制类型转换的方法。 自动类型转换是指不需要书写代码,由系统自动完成的类型转换。这种转换的规则是从存储范围小的类型到存储范围大的类型。具体规则为:所有的 byte、short、...

    java代码-使用java解决强制转换的源代码

    java代码-使用java解决强制转换的源代码 ——学习参考资料:仅用于个人学习使用!

    Java 多态中的类型转换

    本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...

    浅谈Java数值类型的转换与强制转换

    强制类型转换是Java中一种用于将一个数值类型转换为另一个数值类型的方法。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如,double类型的值可以强制转换为int类型的值,...

    Java 基本语法(三)——运算符和类型转换

    显式类型转换也称为强制类型转换,用于将一个较大的数据类型转换为较小的数据类型。需要注意的是,这可能会导致数据丢失。例如: ```java double x = 9.99; int nx = (int) x; // nx 的值为 9 ``` 为了防止数据...

    (java中的自动类型转换与强制类型转换测试代码)

    如标题所示,更多教程已经在主页记录,欢迎大家学习交流:...

Global site tag (gtag.js) - Google Analytics