实用技巧 Java类型转换与强制类型转换

技巧|转换

如果你以前有编程经验,那么你已经知道把一种类型的值赋给另外类型的一个变量是相当常见的。如果这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 )也是互相不兼容的。

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。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索变量
, byte
, 类型转换
, 类型
, 强制类型转换
, 整数
, java小数转换
, 强制转换
, pdversion类型转换
, constc++类型转换
, ioread byte b
, byte 转换
, 强制
Conversion
c 强制类型转换、强制类型转换、java强制类型转换、c语言强制类型转换、js强制类型转换,以便于您获取更多的相关知识。

时间: 2024-10-26 06:14:43

实用技巧 Java类型转换与强制类型转换的相关文章

自动类型转换·强制类型转换

Java中的自动类型转换 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型变量 score1 可以直接为 double 型变量 score2 完成赋值操作,运行结果为: 82.0  这种转换称为自动类型转换. 当然自动类型转换是需要满足特定的条件的: 1.  目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型 2.  目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为

《Java 7程序设计入门经典》一2.13 使用强制类型转换

2.13 使用强制类型转换 尽管自动类型转换很有用,但是由于它们只能用于兼容类型间扩大范围的转换,它们也不能满足所有的编程需要.对于其他情况,只能运用强制类型转换.强制类型转换(cast)是告诉编译器将一种类型转换为另一种类型.所以,它需要显式类型转换.强制类型转换具有以下一般形式: (target-type) expression 这里,target-type指定特定表达式转化到何种目标类型.例如,如果想把表达式x/y的类型转换为int类型,可以写成: 这里,尽管变量x和y都是double类型

c++中四种强制类型转换及区别对比

C++四种强制类型 reinterpret_cast<目标类型>(原类型变量)//重解释类型转换  dynamic_cast<new_type>(expression)//动态类型转换  static_cast<new_type>(expression)//静态类型转换  const_cast<new_type>(expression)//返回一个指向非常量的指针   1.const_cast:常量指针被转化成非常量的指针,并且仍然指向原来的对象:常量引用被

浅谈Java中强制类型转换的问题_java

为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 测试类 * @author * @创建日期 2016-5-31 */ public class Test{ public static void main(String[] args) { List<String> list=new Array

Java核心技术卷I基础知识3.5.3 强制类型转换

3.5.3 强制类型转换 在上一小节中看到,在必要的时候,int类型的值将会自动地转换为double类型.但另一方面,有时也需要将double转换成int.在Java中,允 许进行这种数值之间的类型转换.当然,有可能会丢失一些信息.在这种情况下,需要通过强制类型转换(cast)实现这个操作.强制类型转换 的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名.例如:   这样,变量nx的值为9.强制类型转换通过截断小数部分将浮点值转换为整型. 如果想对浮点数进行舍入运算,以便得到最

浅谈PHP强制类型转换,慎用!_php技巧

PHP是一门弱类型的语言.这是它的优势和特点,但是有的时候你又不得不对类型进行相应的转换. 这个时候问题就来了.因为很多情况下,你会发现转换类型之后得到的数据和预期的值相差老大一截. 这里我以强制转换为整形作为例子. 看下面的代码,可以说你绝对不可能说出正确的答案.echo (int) 123.999999999999999; echo (int)   -1.999999999999999;echo (int)   -1.9999999999999999; echo (int)   -0.999

php foreach 参数强制类型转换的问题_php技巧

所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下: foreach((array)$arr as $key => $value); 这样做一直相安无事,就在前几天,突然出现了问题.我强制类型转换以后不能正常的调用object的方法了. 复制代码 代码如下: <?php class service implements Iterator{ function __construct($service_define,$filter=null){ $thi

java中举个向上类型转换,向下类型转换的例子瞧瞧

问题描述 java中举个向上类型转换,向下类型转换的例子瞧瞧 java中举个向上类型转换,向下类型转换的例子看看,谢谢.类型的上下转换仅限父类和子类之间吗基本数据类型之间的转换有上下类型转换这一种说法吗 解决方案 通俗地说,由于继承关系的存在,父类拥有的,子类也拥有:而子类额外有的,父类肯定没有.例如:父类为动物,那么子类阿猫肯定是动物,但是动物不一定是阿猫. Animal a = new Animal();Cat cat = new Cat();a = cat;//可以将子类对象付给父类对象,

string-这句话等号右面是强制类型转换吗?

问题描述 这句话等号右面是强制类型转换吗? Map map111 = (Map) send(map);这句话等号右面是强制类型转换吗? 解决方案 看你的send返回的是什么类型.java规定,从抽象往具体转换,需要强制转换操作,反之不需要. 举例: send返回"中国人"类型,你用"人"接收,不需要转换.你用"北京人"接收,需要转换.假设它们的继承关系是 人-中国人-北京人 解决方案二: 就是强制转换,,但是若返回的不是map,,就会抛异常 解决