这一周学习第三次JAVA知识点。这一次主要学习数据类型转换和运算符的相关知识,是可以通过代码来练习学习的。其实相对来说比较简单吧还是,和C蛮像的。
一.JAVA数据类型转换
强制类型转换(显式转换)和自动类型转换(隐式转换)
数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,他需要从一种数据类型转换成另一种数据类型。
1.隐式转换
执行自动类型的转换的条件:
- 两种数据类型彼此兼容
- 目标类型的取值范围大于源数据类型(低级类型数据转换成高级数据类型)
例如byte类型向short类型转换时,由于short类型的取值范围较大,会自动将byte转换为short类型。
自动转换的转换规则如下:
1.数值型数据的转换:
byte→short→int→long→float→double
2.字符型转换为整型:char→int
下面可以举个例子看一下,可以仔细思考一下代码以及程序的意义。
然而自动类型提升虽然有好处,但他也会引起令人疑惑的编译错误,比如
byte b=50; b=b * 2;//Type mismatch :cannot convert from int to byte
这个程序看起来很正确,但是第二行会报“类型不匹配:无法从int转换为byte”,这是因为该程序试图将一个完全合法的 byte 型的值 50*2 再存储给一个 byte 型的变量。但是当表达式求值的时候,操作数被自动的提升为 int 型,计算结果也被提升为 int 型。这样表达式的结果现在是 int 型,不强制转换它就不能被赋为 byte 型。确实如此,在这个特别的情况下,被赋的值将仍然适合目标类型。
可以使用一个显示的额强制类型转换
byte b=50; b=(byte)(b * 2);
2.显式转换
如果我们想把double型的值赋给一个int型的变量,这种转换不会自动进行,因为double型的变化范围比int型的小。
所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
语法格式如下(type)variableName
,其中type为variableName要转换成的数据类型,而variableName是指要进行类型转换的变量名称int a=3; double b= 5.0; a=(int)b;
在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。
二.算术运算符
Java语言中的运算符除了具有优先级以外,还有一个结合性的特点。 所以当一个表达式中出现多种运算符时,执行的先后顺序不仅要遵循运算符优先级别的规定,还要受运算符结合性的约束,以便确定是自左向右进行运算还是自右向左进行运算。
Java中的算术运算符主要用来组织数值类型数据的算术运算,按照参加运算的操作数的不同可以分为一元运算符和二元运算符。
1.一元运算符
算术一元运算一共有三个,分别是-、++和–。