您的位置 首页 java

尚学堂java学习笔记:造型运算符

“造型”(Cast)的作用是“与一个模型匹配”。在适当的时候,Java 会将一种数据类型自动转换成另一种。例如,假设我们为浮点变量分配一个整数值,计算机会将int 自动转换成 float 。通过造型,我们可明确设置这种类型的转换,或者在一般没有可能进行的时候强迫它进行。

为进行一次造型,要将括号中希望的数据类型(包括所有修改符)置于其他任何值的左侧。

正如您看到的那样,既可对一个数值进行造型处理,亦可对一个变量进行造型处理。但在这儿展示的两种情况下,造型均是多余的,因为编译器在必要的时候会自动进行int 值到long 值的转换。当然,仍然可以设置一个造型,提醒自己留意,也使程序更清楚。在其他情况下,造型只有在代码编译时才显出重要性。

在C 和C++中,造型有时会让人头痛。在Java 里,造型则是一种比较安全的操作。但是,若进行一种名为“缩小转换”(Narrowing Conversion)的操作(也就是说,脚本是能容纳更多信息的数据类型,将其转换成容量较小的类型),此时就可能面临信息丢失的危险。此时,编译器会强迫我们进行造型,就好象说:“这可能是一件危险的事情——如果您想让我不顾一切地做,那么对不起,请明确造型。”而对于“放大转换”(Widening conversion),则不必进行明确造型,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失。

Java 允许我们将任何主类型“造型”为其他任何一种主类型,但布尔值(bollean)要除外,后者根本不允许进行任何造型处理。“类”不允许进行造型。为了将一种类转换成另一种,必须采用特殊的方法(字串是一种特殊的情况,本书后面会讲到将对象造型到一个类型“家族”里;例如,“橡树”可造型为“树”;反之亦然。但对于其他外来类型,如“岩石”,则不能造型为“树”)。

1. 字面值

最开始的时候,若在一个程序里插入“字面值”(Literal),编译器通常能准确知道要生成什么样的类型。但在有些时候,对于类型却是暧昧不清的。若发生这种情况,必须对编译器加以适当的“指导”。方法是用与字面值关联的字符形式加入一些额外的信息。

十六进制(Base 16)——它适用于所有整数数据类型——用一个前置的0x 或0X 指示。并在后面跟随采用大写或小写形式的0-9 以及a-f。若试图将一个变量初始化成超出自身能力的一个值(无论这个值的数值形式如何),编译器就会向我们报告一条出错消息。注意在上述代码中,最大的十六进制值只会在 char ,byte 以及 short 身上出现。若超出这一限制,编译器会将值自动变成一个int,并告诉我们需要对这一次赋值进行“缩小造型”。这样一来,我们就可清楚获知自己已超载了边界。

八进制(Base 8)是用数字中的一个前置0 以及0-7 的数位指示的。在C,C++或者Java 中,对二进制数字没有相应的“字面”表示方法。

字面值后的尾随字符标志着它的类型。若为大写或小写的L,代表 long ;大写或小写的F,代表float;大写或小写的D,则代表 double 。指数总是采用一种我们认为很不直观的记号方法:1.39e-47f。在科学与工程学领域,“e”代表 自然对数 的基数,约等于2.718(Java 一种更精确的double 值采用Math.E 的形式)。它在象“1.39 ×e 的-47 次方”这样的指数表达式中使用,意味着“1.39×2.718 的-47 次方”。然而,自 FORTRAN 语言发明后,人们自然而然地觉得e 代表“10 多少次幂”。这种做法显得颇为古怪,因为FORTRAN 最初面向的是科学与工程设计领域。理所当然,它的设计者应对这样的混淆概念持谨慎态度。但不管怎样,这种特别的表达方法在C,C++以及现在的Java 中顽固地保留下来了。所以倘若您习惯将e 作为自然对数的基数使用,那么在Java中看到象“1.39e-47f”这样的表达式时,请转换您的思维,从程序设计的角度思考它;它真正的含义是“1.39×10 的-47 次方”。

编译器通常会将指数作为双精度数(double)处理,所以假如没有这个尾随的f,就会收到一条出错提示,告诉我们须用一个“造型”将double 转换成float。

2. 转型

大家会发现假若对主数据类型执行任何算术或按 位运算 ,只要它们“比int 小”(即char,byte 或者short),那么在正式执行运算之前,那些值会自动转换成int。这样一来,最终生成的值就是int 类型。所以只要把一个值赋回较小的类型,就必须使用“造型”。此外,由于是将值赋回给较小的类型,所以可能出现信息丢失的情况)。通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。若将一个float 值与一个double 值相乘,结果就是double;如将一个int 和一个long 值相加,则结果为long。

文章来源:智云一二三科技

文章标题:尚学堂java学习笔记:造型运算符

文章地址:https://www.zhihuclub.com/185118.shtml

关于作者: 智云科技

热门文章

网站地图