类型转换和运算符(类型转换运算符有哪些)

类型转换和运算符(类型转换运算符有哪些)

变量的注意事项:

  1. 变量在使用之前必须先赋值,不使用可以不赋值
  2. 变量可以连续定义
  3. 变量只在当前范围内有效
  4. 变量在同一个范围内,不能定义相同的名字

类型转换:

首先要知道为什么要进行类型转换?

不同的数据类型是无法进行运算的,必须把它们统一为同一种数据类型才可以进行运算。

类型转换分为隐式类型转换和强制类型转换,下面分别介绍。

  1. 隐式类型转换

是从小范围的数据类型转换为大范围的数据类型,分为两种情况:第一种是比int小的数据类型在运算时,都会提升为int类型去运算;第二中是比int大的数据类型在运算时,小范围数据类型会转换为大范围数据类型去运算。

  1. 强制类型转换

是从大范围的数据类型转换为小范围的数据类型,举例如下:

byte a=(byte)100;

分为三种情况:第一种是转换之后数据发生改变,这种情况没有意义,一般情况下不使用;第二种情况是转换之后数据类型不发生改变;第三种情况是转换之后小数变为整数。

接下来我们要注意几个注意事项:

  1. boolean类型不参加任何类型转换

我们知道,布尔类型只有两个取值true和false;其他的数据类型之间,无论是短整型、长整型,单精度浮点型、双精度浮点型,都可以进行数据转换,例如int类型的30转换为short类型的30,但无论是true和false转为其他类型还是其他类型转为true和false都是不能实现的。例如:true能转为30吗?20能转为false吗?显然不能。

  1. 常量优化机制

首先明确,只有比int小的数据类型才有常量优化机制。常量默认是int数据类型,常量优化机制是比int小的数据类型A在和常量进行运算时,常量的数据类型自动转换为数据类型A,它的原理是在计算机底层,对其进行了强制类型转换。举个例子:

byte a=100;//在这个语句中,常量100默认是int类型,当它赋值给变量a时编译应该报错,但事实却是能够成功运行,原因就是byte类型具有常量优化机制,在底层执行了这样的操作:byte a=(byte)100;

  1. long数据类型后加L;float数据类型后加F

因为long数据类型的范围大于int数据类型的范围,而常量默认为int类型,因此会出现下面这个语句的问题:

System.out.println(“4000000000”);//4000000000的取值范围超出了int的取值范围,此时运行,编译会报错,因此需要在其后面加上L,以区分int和long;

至于float数据类型后加F,我们来看这样一个例子:

float a=3.14;

System.out.println(a);

此时编译就会报错,因为小数默认是double类型,float和double的取值范围都大于int,不具有常量转化机制,因此定义float类型是必须在后面加上F,表示这个数据是float类型,而不是默认的double类型。

下面给出基本数据类型的取值范围大小比较:

byte < short = char < int < long < float < double

运算符:

运算符主要学习以下五种:算数运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符。下面分别介绍。

  1. 算数运算符(+、-、*、/、%)

这里重点说一下除(/)和取余(%)。首先看几个除法运算的例子:

System.out.println(10/3);//输出3

System.out.println(10.0/3);//输出3.0

System.out.println(10/3.0);//输出3.0

System.out.println(10.0/3.0);//输出3.0

我们发现第一条语句输出3,其余三条输出3.0。这个现象可以用类型转换来解释:不同的数据类型进行运算时必须统一为相同的数据类型,第一条语句参与运算的10和3都是int类型,因此结果也应该是int类型,所以为3;第二条语句小数10.0默认为double类型,3为int类型,根据隐式类型转换规则,小范围数据类型转换为大范围数据类型,int类型的3转换为double类型的3.0,因此结果是3.0,;其他语句也是如此。

下面是几个取余运算的例子:

System.out.println(10%3);//输出1

System.out.println(10%-3);//输出1

System.out.println(-10%3);//输出-1

System.out.println(-10%-3);//输出-1

在这里只需记住一个结论:取余运算的结果的符号与前面的数的符号相同。

除了上面5个运算符,算数运算符还有自增(++)和自减(–)运算,其运算规律如下:

假如定义一个int类型的变量a等于10,无论是a++还是++a,运算后a的结果都是加一,为11;而对于式子整体的值,a++取加一之前的值,为10,++a取加一之后的值,为11。对于自减运算有同样的规律。

附:字符相加,利用ASCII码表转换后进行加法运算;任何类型和字符串相加,都会自动转换为字符串类型。

  1. 赋值运算符(=、+=、-=、*=、/=、%=)

基本赋值运算符是=;其余5个位复合赋值运算符,用法如下:

int a=9;

a+=1;//这条语句就相当于a=a+1;其他复合赋值运算符也是如此。

注意:复合赋值运算符在底层有强制类型转换,例如:

byte a=10;

a+=1;//这条语句相当于a=a+1;不同数据类型运算时,比int小的自动转换为int类型,所以a+1中byte型的a转换为int类型与1相加,结果为int,再赋值给a时应该编译报错,但事实却是运行成功,这是因为在底层有a=(byte)(a+1);的强制类型转换操作。

  1. 比较运算符(>、<、>=、<=、==、!=)

运算结果为布尔类型。

  1. 逻辑运算符(&、|、!、&&、||)

运算数据和运算结果都为boolean类型,与(&)是有假则假、全真为真;或(|)是有真则真、全假为假。短路与(&&)如果第一个为假,则不用判断后面,结果为假;短路或(||)如果第一个为真,则不用判断后面,结果为真。

  1. 三元运算符

格式:boolea类型数据 ?值1 :值2;

类型转换和运算符(类型转换运算符有哪些)

相关文章:

你感兴趣的文章:

标签云: