JAVA基础-操作符篇

一,算术操作符:
常见算术操作符的常规用法省略(如:+, -, *, /, =, ==, %,)。
赋值操作符 “ = ” 能操作所有对象。(下面有详细说)
优先级:先乘除后加减,表达式较长或者其它操作符一律用多个括号() 盘它。
赋值操作符“ = ”的使用:1.已命名变量(不能是常量) = 任意东西。2.一个对象 = 另一个对象。
因为对一个对象进行操作时,我们真正操作的是对对象的引用。所以把一个对象赋值给另一个对象的意思是把“引用”从一个地方复制到另一个地方。(左边的变!)
对象c = 对象d; 结果是 c和d都指向原本只有d指向的那个对象。

 

看一个例子:

 1 class Tank{
 2     int level;
 3 }
 4 public class Assignment{
 5   public static void main(String[] args){
 6     Tank t1 = new Tank();
 7     Tank t2 = new Tank();
 8     t1.level = 9;
 9     t2.level = 47;
10     print("t1.level = "+ t1.level +"t2.level = "+ t2.level);
11     t1 = t2;     // t1和t2现在都是包含了一个相同的引用:原先t2的引用。 简单说t1和t2现在指向相同的对象(就是两个不同的名字而已) 别名现象   
12     print("t1.level = "+ t1.level +"t2.level = "+ t2.level);
13     t1.level = 27; //这里只改变t1的值,但同样的t2也变27(因为就是同一个对象)
14    print("t1.level = "+ t1.level +"t2.level = "+ t2.level);
15   }
16 }

补充:原本t1包含的对对象的引用,是指向一个值为9的对象。在给t1赋值的时候这个引用被覆盖掉了(丢失了,没了);而那个不再被引用的对象会被“垃圾回收器”自动清理。
所以要避免别名现象就应该写 t1.level = t2.level; 而不是对象之间赋值。
所以给对象赋值本身是个邪教行为。
操作符的普遍用法:1. x+=4 等同于 x=x+4。( -=, *=, /=, 同理)
自动递增(递减);1. i++ :先运行后+1。 2.  ++i: 先+1后运行。(i--, --i 同理)

二,关系操作符:

常见关系操作符的常规用法省略(如:>, <, >=,<=, ==, !=
赋值操作符 “ ==, != ” 能操作所有对象。
一个对象==另一个对象:比较的不是内容,比较的是对象的引用。

public class Equivalence{
    public static void main(String[] args){
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1==n2);           //输出结果是 false  
        System.out.println(n1.equals(n2));   //输出结果是  true 
    }    

上述代码中出现的 equals()方法比较的是内容。先简单知道该方法就可以。

三,字符串操作符: + 和 += 。

注意的是:System.out.println()里面的 + 的作用:1.字符串连接。2.如果有必要,还要执行字符串转换。
比如:(一个String)+ (非String元素):编译器会把 非String元素 转换成 String类型。

public class StringOperators{
    public static void main(String[] args){
        int x = 0,y = 1, z = 2;
        String s = "x,y,z,";
        System.out.println(s+ x+ y+ z );   //输出结果是 x,y,z 012            把x,y,z转换成他们的字符串形式,然后连接这些字符串
        System.out.println(x+ " "+ s);    //输出结果是 0,x,y,z              把x转换成String类型
        s +="(summed) = ";                //并列操作                        使用 += 操作符把一个字符串追加到 s 上
        System.out.println(s+ (x+ y+ z));  //输出结果是 x,y,z (summed) = 3
        System.out.println(" "+ x);       //输出结果是 0             (" "+ x)是字符串转换的一种简单方式(代替Integer.toString())
    }    

字符串的一个有趣的地方:如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型
(注意:编译器会把双引号内的字符序列自动转换成字符串)

四,类型转换操作符:

java在适当的时候,会把一种数据类型自动转换成另一种。(比如给一个浮点变量赋整数值,编译器把int自动转化成float)
类型转换运算允许我们自行进行这种类型的转换,甚至可以强制进行类型转换。

public class Casting{
    public static void main(String[] args){
        int i = 200;
        long lng = (long)i;
        lng = i;       //扩展转换,没有必要转换
        long lng2 = (long)200;
        lng2 = 200;     //窄化转换
        i = (int)lng2;   //需要转换
} 

扩展转换:从小容量类型转换到大容量类型,有时候显的多余。
窄化转换:从大容量类型转换到小容量类型,有信息丢失风险。(会产生截尾与舍入问题)
比如:float或者double类型转型为int类型时,总是对数字进行截尾。(小数点后面的都舍弃掉。如0.1, 0.5, 0.9截尾后就都是0)

2019-03-19

猜你喜欢

转载自www.cnblogs.com/hanggai/p/10560535.html
今日推荐