JAVA编程思想学习第三篇の操作符

时间:2021-08-07 17:50:39

     在最底层,java中的数据操作是通过使用操作符来操作的。

1.使用java操作符

     操作符接受一个或多个参数,并生成一个新值。加号和一元的正号+、减号和一元的负号-、乘号*、除号/以及赋值号=的用法和其他编程语言类似。

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

2.优先级


优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 ==   != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>=   >>>= 从右向左

        该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低


3.赋值

     基本数据类型赋值很简单。基本类型存储了实际的数值,并非指向对象的引用,所以在赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如:对基本数据类型使用a=b,那么b的内容就复制给了a,接着修改a,而b根本不会受到修改的影响。


    对对象赋值时候,对一个对象进行操作的时候,我们实际上操作的是对象的引用。所以“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到了另一个地方。


    对象赋值会产生“别名现象”,虽然引用被覆盖后,不再引用的对象会被“垃圾回收器”自动清理,但是为对象赋值会产生意想不到的效果,所以最好不要使用。


    实例:方法调用中的别名问题

class Letter{
char c;
}

public class PassObject{
static void f(Letter y){
y.c='z';
}
public static void main(String[] args){
Letter x=new Letter();
x.c='a';
print("1:x.c:"+x.c);
f(x);
print("2:x.c:"+x.c);
}
}/* Output:
1:x.c:a
2:x.c:z
*///:~

方法f()中Letter y实际传递的是一个引用。

4.关系操作符

class Value{
int i;
}
public class EqualsMerhod2{
public static void main(String[] args){
Value v1=new Value();
Value v2=new Value();
vi.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}/*Output
false
*///~
     
      自定义的类对象比较时候,如果不重写equals()方法,则比较对象的引用。所以要重写equals方法。

5.逻辑操作符

      逻辑操作符包括:与(&&)、或(||)、非(!)。
     当使用逻辑操作符时,会遇到一种“短路现象”。即一旦能够明确无误的确定整个表达式的值,就不在计算表达式余下的部分了。

6.直接常量

     
int i1=0x2f;
int i2=0x2F;
int i3=0177;
int i4=0xfff;
long l1=200L;
float f1=1F;
double d1=1d;
     直接常量后面的后缀字符标志了它的类型。若为L,代表long类型。十六进制由前缀0x和后面跟随0-9或小写的a-f来表示。八进制由0和后面的0-7组成。
     指数计数法:1.39E-43实际是1.39*10的-43次幂。

7.移位操作符

     左移情况(<<):低位补0;      右移情况:
  1. >>>:使用零扩展,无论正负,都在高位插入0.java特有
  2. >>:补符号位,正数补0,负数补1.


8.类型转换操作符

      截尾:float f1=0.7f;                   int i=(int)f1;                   输出i为0,此为直接截断。
     舍入:如果想要得到舍入结果就要使用java.lang.Math中的round()方法。      

math.round(-8.9) =-9

math.round(-8.1) =-8

math.round(8.9) =9

math.round(8.1) =8