java操作符

1 使用java操作符

几乎所有的操作符都只能操作“基本类型”,
例外的是"="、"=="、"!="可以操作几乎所有的对象
此外String还支持“+”和“+=”

2 优先级

最简单的规则就是先乘除后加减,实际code时,最好用括号,简单明了

3 赋值操作符 “=”

必须有一个物理空间可以存储等号左边的值
1.对于基本类型,就是将一个地方的内容赋值到另外一个地方
2.为对象“赋值”时,我们真正操作的是对对象的引用,就是将右边的引用赋值给左边

4 算术运算符

java的基本算术操作符与其他大多数语言类似,包括 + , − , +,-, +% , ∗ , / , ,*,/, /
java也支持操作符后紧跟一个符号,包括 + = , − = , ∗ = , / = , +=,-=,*=,/=, +===/=%=

4.1 一元加、减操作符

一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应
例:a = -b
注意像 x = a * -b 编译器是可以识别的,即 x = a * (-b)

5 自动递增或递减

前缀加、前缀减、后追加、后缀减
前缀意味着先执行加减运算再生成值
后缀意味着先生成值后进行加减运算

C + + C++ C++就是“对c的超越”
"Java = C + + − − C++-- C++"

6 关系操作符

关系操作符生成的是一个boolean结果,计算的是操作数之间的关系
包括 > , > = , < , < = , = = , ! = >,>=,<,<=,==,!= >>=<<===!=
= = == == ! = != !=适用于所有基本数据类型和对象

6.1 测试对象的等价性

= = == == ! = != !=比较的是对象的引用
equals()比较的是对象实际的内容

public class Test{
    public static void main(String[] args) {
        Integer a = new Integer(54);
        Integer b = new Integer(54);
        //比的是引用
        System.out.println(a == b);
        System.out.println(a != b);
        //比的是内容
        System.out.println(a.equals(b));
    }
}
/*output
false
true
true*/

这里又列举了一个例子,我们自己定义了一个新类,但我们发现结果很奇怪,
因为equals()的默认行为是比较引用,所以除非在新类中覆盖equals()方法
大多数Java类库都实现了我们期望的equals()方法

public class Test{
    public static void main(String[] args) {
        Demo d1 = new Demo(54);
        Demo d2 = new Demo(54);
        System.out.println(d1.equals(d2));
    }
}
class Demo{
    int value;
    public Demo(int value){
        this.value = value;
    }
}

7 逻辑操作符

与(&&)、或(||)、非(!)
与C++不同的是,不可将一个非布尔值的值当作布尔值在逻辑表达式中使用

while(1)//这样的写法在Java中会报错 不兼容的类型: int无法转换为boolean

7.1 短路

即一旦明确无误地确定整个表达式的值,就不再计算表达式的余下部分。

public class Test{
    public static void main(String[] args) {
        int x = 0;
        int y = 0;
        int k = 0;
        for(int z = 0;z < 5;z++){
            if((++x > 2) && (++y > 2) && (k++ > 2)){
                x++;
                ++y;
                k++;
            }
        }
        System.out.println(x + " " + y + " " + k);
    }
}
/*output
5 3 1
*/

8 直接常量

直接常量后面的后缀字符标志它的类型,

大写或小写的L/l,代表long (但小写的l易产生混淆)
大写或小写的F/f,代表float
大写或小写的D/d,代表Double

十六进制以前缀0x或0X
八进制以前缀0
二进制没有直接常量表示方法,可以通过Integer和Long的静态方法toBinaryString()实现
如果将比较小的类型传递给Integer的toBinaryString()方法,则该类型将自动被转换成int

8.1 指数计数法

float a = 1.39e-43f
1.39 ∗ 1 0 − 43 1.39*10^{-43} 1.391043

9 按位操作符

&(与) |(或) ~(非) ^(异或)

按位操作符可与等号联合使用 :&=, |=, ^= 没有~=
对于布尔值,按位操作符与逻辑操作符效果相同,但按位操作符不会中途短路

10 移位操作符

左移( << ) 右移( >> )
"有符号"右移使用“符号扩展”,若符号为正,则在高位插入0;若符号为负,则在高位插入1
Java增加了一种无符号右移位操作符( >>> ),无论正负,都在高位插入0
移位操作符也可与等号联合使用

对char、byte、short类型的数值进行移位处理,
在移位之前,它们会被转为int类型,并且得到结果也是int类型的值

10.1 原名、补码、反码

(1)原码:
最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
(2)反码:
正数的反码还是等于原码
负数的反码就是他的原码除符号位外,按位取反。
(3)补码
正数的补码等于他的原码
负数的补码等于反码+1。

11 三元操作符if-else

booolean-exp ? value0 : value1 表达式为true返回value0,反之返回value1

12 字符串操作符 + 和 +=

连接不同的字符串

int x = 1;
System.out.println(x + "xyz");//第一个x自动转化为字符串
System.out.println(“” + x);//相当于Integer.toString(x)

13 类型转换操作符

类型转换 “()”
扩展转换(小类型->大类型)不用显示使用操作符
窄化转换(大类型->小类型)需要显示转换

13.1 截尾和舍入

窄化转换 例如4.7变成int就是4,直接截去尾巴,调用Math.round()会四舍五入

13.2 提升

如果对基本数据类型进行算术运算或按位运算,大家都自动提升为其中最大的数据类型

14 Java没有sizeof

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值