JAVA 基础语法(二)——基本数据类型转换以及运算符

JAVA入门第二天

JAVA 基础语法(二)——基本数据类型转换以及运算符

  • 数据类型转换
    • 自动类型转换
    • 强制类型转换
  • 赋值运算符
  • 算术运算符
  • 关系运算符
  • 逻辑运算符

数据类型转换

Java 语言是一种强类型的语言。强类型的语言有以下几个要求:
1)变量必须有类型:要求声明变量时必须声明类型,而且只能在声明以后才能使用。
2)赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致。
3)运算时类型必须一致:参与运算的数据类型必须一致才能运算。
但是在实际的使用中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种需要,这个语法就是数据类型转换。
在数值处理这部分,计算机和现实的逻辑不太一样,对于现实来说,1和 1.0 没有什么区别,但是对于计算机来说,1 是整数类型,而 1.0 是小数类型,其在内存中的存储方式以及占用的空间都不一样,所以类型转换在计算机内部是必须的。
Java 语言中的数据类型转换有两种:
1)自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。
2)强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

1)自动类型转换

自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以 Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成。

转换规则

从存储范围小的类型到存储范围大的类型。
具体规则为:

byte→short(char)→int→long→float→double

也就是说 byte 类型的变量可以自动转换为 short 类型,示例代码:

byte  b  =  10;
short  s  =  b;//这里在赋值时,JVM 首先将 b 的值转换为 short 类型,然后再赋值给 s。

注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。

2)强制类型转换

强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。

转换规则

从存储范围大的类型到存储范围小的类型。
具体规则为:

double→float→long→int→short(char)→byte

语法格式为:

需要转换到的类型 变量=(转换到的类型)需要转换的值;

扫描二维码关注公众号,回复: 2188447 查看本文章

1)整数强制转换为整数时取数字的低位,例如 int 类型的变量转换为 byte 类型时,则只去 int 类型的低 8 位(也就是最后一个字节)的值。
示例代码:

int  n  =  123;
byte  b  =  (byte)n;
System.out.println(b);//123
int  m  =  1234;
byte  b1  =  (byte)m;
System.out.println(m);//-46

b 的值还是 123,而 b1 的值为-46。b1 的计算方法如下:m 的值转换为二进制是10011010010,取该数字低8位的值作为b1的值,则b1的二进制值是11010010,按照机器数的规定,最高位是符号位,1 代表负数,在计算机中负数存储的是补码,则该负数的原码是 10101110,该值就是十进制的-46

2)小数强制转换为整数,采用的是“去 1 法”,也就是无条件的舍弃小数点的所有数字。

double  d  =  3.10;
int  n  =  (int)d;

这里将 double 类型的变量 d 强制转换成 int 类型,然后赋值给变量 n。采用“去1法”,结果是 3。

注意问题:强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。


赋值运算符

1)赋值运算符: =

2)运算过程:

    先计算 “=” 右边的值,然后将值赋值给左边的变量。

3)案例:

int a=10+10;//计算10+10->20 然后将20赋值给int 型的变量a

4)扩展赋值运算符:

扩展运算符 名称 案例
+= 加等于 c+=b等价于c=c+b
-= 减等于 c-=b等价于c=c-b
*= 乘等于 c*=b等价于c=c*b
/= 除等于 c/=b等价于c=c/b
%= 取余等于 c%=b等价于c=c%b

代码案例:

    int a=5,b=2;
        a/=b;// 等价于a=a/b;可以理解为它的简写
    System.out.println(a);//2   

算术运算符

1)算术运算符:
算术运算符 名称 案例
+ 加法 int a=5,b=2,c;c=a+b;//c=7
- 减法 int a=5,b=2,c;c=a-b;//c=3
* 乘法 int a=5,b=2,c;c=a*b;//c=10
/ 除法 int a=5,b=2,c;c=a/b;//c=2
% 取余 int a=5,b=2,c;c=a%b;//c=1
(++) 自增1 int a=5;a++;//a=6
(- -) 自减1 int a=5;a- -;//a=4

2)自增(++)和自减(- -)

++ 和 – 既可以出现在变量的左边,也可以出现在右边,但结果是不同的

在左边:先进行自增或自减(运算),再赋值
在右边:先赋值,再进行自增或自减(运算)

代码案例:

int  a=5;
int  b=++a;
System.out.println(b);//6
System.out.println(a);//6
int  m=5;
int  n=m++;
System.out.println(m);//6 
System.out.println(n);//5 

注意:一定要注意!自增和自减运算符只能用于操作变量不能直接用于操作数值或常量!例如 5++ 、 8– 等写法都是错误的!


关系运算符

关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。

关系运算符 名称 案例
‘>’ 大于 5>2 //true
‘<’ 小于 5<2;//false
‘>=’ 大于等于 5>=2;//true
‘<=’ 小于等于 5<=2;//false
‘==’ 等于 5==2;//false
‘!=’ 不等于 5!=2;//true

逻辑运算符

逻辑运算符要求操作数的数据类型为boolean类型,其运算结果也是boolean类型值。

参与逻辑运算的数据和逻辑运算符的运算结果是都是boolean类型。

1)逻辑运算符:

逻辑运算符 名称 案例
&& 逻辑与(短路与) true && false //false
ll 逻辑或(短路或) true ll false //true
! ! true //false
& 逻辑与 true & false //false
l 逻辑或 true l false //true
^ 逻辑异或 true ^ false //true

2)”&&(||)”与“&(|)”:

&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。

代码案例:
首先我们看 “&”

    int a=5,b=10;
    boolean  boo=a>b&a++>b;
    System.out.println(boo);//false
    System.out.println(a);//6

显而易见,上例中结果是boo值为false,a的值是6,因为在 “&”的运算表达式中 ,右边有一个a的自增。那我们同样的代码看一下短路与“&&”

    int a=5,b=10;
    boolean  boo=a>b&&a++>b;
    System.out.println(boo);//false
    System.out.println(a);//5

上例中a的值并没有进行自增,为什么呢?因为短路与“&&”的计算过程是系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止,所以上例中在运算符左端的值已经被判断为false,则因无论运算符右端的值为true或为false,其最终结果都为false,所以运算符右边的值并没有执行,也就是”a++”并没有执行。

注意:
1)两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。它们所以运算过程略有差异,但是运算结果是一样的。
2)在程序设计时使用&&和||运算符,不建议使用&和|运算符。

3)逻辑运算符真值表:

A B A&&B AllB A&B AlB A^B !A
true true true true true true false false
true false false true false true true false
false true false true false true true true
false false false false false false false true

猜你喜欢

转载自blog.csdn.net/qq_34598667/article/details/72867933