类型转换与运算符

类型转换 :

顾名思义就是不同类型变量之间的相互赋值

1. 表示范围更小的类型转换成范围较大的类型时,需要 隐式转换
2. 把范围大的类型赋值给范围小的 , 需要 强制类型转换 , 但是 可能精度丢失
3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查

4.毫不相干的类型不能转换,比如 intboolean

隐式转换 :
int a = 10;
long b = a;

long表示的范围更大,可以将int赋值给long,但不能将long赋值给int

强制转换 :
long a = 10;
int b = (int)a;
int a = 0;
double b = 10.5;
a = (int)b;

double表示的范围更大,可以将double赋值给int,但赋值之后10.5变成10了,导致精度丢失

赋值的时候Java自动检查字面值符不符合该类型取值范围:

byte a = 100;//编译通过
byte b = 256;//编译错误
byte表示的数据范围是-128 ~ +127,使用字面值常量赋值的时候,Java会自动进行一些检查校验,判定赋值是否合理


数值提升:

1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .
2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算,比如:
int 与 long 混合运算:
int a = 10; 
long b = 20; 
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.

byte 与 byte 运算:

byte a = 10; 
byte b = 20; 
byte c = (byte)(a + b); //虽然是同类型,但自动提升为int类型,所以这里强制转换

计算机在处理byte这种小于4个字节的运算时,会提升为4个字节的int类型,再计算

Java可以将字符串通过包装类和方法转换成整数,比如:

int 与 String 相互转换:

//int转换成String
int num = 10; 
String str1 = num + "";  
String str2 = String.valueOf(num);

//String转换成int
String a = "100"; 
int b = Integer.valueOf(a);

运算符

算术运算符

1、基本的四则运算符: + - *  /   %

需要注意的是:

  • 0不能作为除数
  • %表示取余

2、增量赋值运算符:+=  -=   *=    /=    %=

int a = 10;
a += 1;//等价于 a = a + 1;

增量运算符会帮忙进行强制类型转换,比如:

short a = 1;
a = int(a+1);
等价于
short a = 1;
a += 1;

3、自增/自减运算符:++    --

int a = 10;
a++;//跟++a一样

在下面情况下,a++与a--情况不一样

int a = 10;
int b = a++;//b = a,a = a + 1,先使用,后++
a = 11,b = 10
int a = 10;
int b = ++a;//a = a + 1,b = a,先++,后使用
a = 11,b = 11

关系运算符:==   !=   <    >    <=    >=

“=”是赋值,“==”是相等

关系运算符的表达式返回值都是 boolean 类型

int a = 1;
int b = 2;
System.out.println(a == b); //false
System.out.println(a != b); //true
System.out.println(a < b);  //true
System.out.println(a > b;   //false
System.out.println(a <= b); //true
System.out.println(a >= b); //false

逻辑运算符:&&     | |    !

逻辑运算符的结果和返回值都是boolean类型

格式为 (表达式1  &&  表达式2)

& 和 | 也算逻辑运算符,但是跟&& 和 || 相比,不支持短路求值,所以不推荐使用

&& :逻辑与/且(有真则真)

| | :逻辑或/或(有假则假)

! : 非/逻辑非

&& 和 || 都有短路求值的特点,比如:

System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false 
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

对于&&来说,如果表达式1为假,就不会执行表达式2,直接判定为false

对于| | 来说,如果表达式1为真,就不会执行表达式2,直接判定为true


位运算符:&   |    ^    ~

位操作表示 按二进制位运算,进行按位运算,首先需要将数字转换成二进制

按位与  &

如果两个二进制位都是 1, 则结果为 1, 否则结果为 0

按位或  | :

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

按位取反  ~ :

如果该位为 0 则转为 1, 如果该位为 1 则转为 0

按位异或  ^ :

如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1


移位运算符:<<     >>     >>>

都是按照二进制来计算的

左移 << :

最左侧位不要了, 最右侧补 0

右移 >>  :

最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

无符号右移 >>> :

最右侧位不要了, 最左侧补 0

1. 左移 1 , 相当于原数字 * 2. 左移 N , 相当于原数字 * 2 N 次方 .
2. 右移 1 , 相当于原数字 / 2. 右移 N , 相当于原数字 / 2 N 次方 .
3. 由于计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 N 次方的时候可以用移位运算代替 .
4. 移动负数位或者移位位数过大都没有意义

条件运算符:表达式1 ? 表达式2 : 表达式3

也叫做三目运算符

表达式1 的值为 true , 整个表达式的值为 表达式2 的值; 表达式1 的值为 false , 整个表达式的值为 表达式 3 的值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值