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. 强制转换
,是没办法的转换,采取“截断”和“取模”的策略。
分享到:
相关推荐
java 强制类型转换示例 java 强制类型转换示例 java 强制类型转换示例
27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型...
java 常用基础类型之强制转换 java 常用基础类型之强制转换
类型转换分为强制手动类型转换和隐式自动类型转换 (1) 基本数据类型 (2) 引用数据类型 (3) 强制类型转换 (4) 包装数据类型
java代码-使用java解决强制转换的源代码 ——学习参考资料:仅用于个人学习使用!
如标题所示,更多教程已经在主页记录,欢迎大家学习交流:...
有利于我们对java的理解,还有对Java泛型的理解,要精通java最好看一看
Java 基本语法(三)——运算符和类型转换 Java 基本语法(三)——运算符和类型转换
强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。 转换规则 从存储范围大的类型到...
Java中强制类型转换共2页.pdf.zip
主要介绍了Java数值类型的转换与强制转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇浅谈Java中强制类型转换的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一、强制类型转换 [java] long ll = 300000; int ii = (int)ll; 二、调用intValue()方法 [java] long ll = 300000; int ii= new Long(ll).intValue(); 三、先把long转换成字符串String,然后在转行成Integer...
小编对null进行强转会不会抛错,非常的好奇,下面小编通过实例代码给大家介绍Java中对null进行强制类型转换的方法,感兴趣的朋友参考下吧
文章目录Java笔记(9)类型转换与包装类对象类型转换(Casting)基本数据类型的Casting:对Java对象的强制类型转换称为造型==操作符与equals方法==:equals():String对象的创建代码练习题包装类(Wrapper)基本数据...
【IT十八掌徐培成】Java基础第02天-03.数据类型-强制类型转换.zip
主要介绍了Java基础之隐式转换vs强制转换的相关资料,需要的朋友可以参考下
golang是强类型语言,有强制类型转换,但是不同于Java语言所使用的强制类型转换。 golang强制类型转换 golang语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。 类型断言 package ...
主要介绍了解决Java中的强制类型转换和二进制表示问题,需要的朋友可以参考下