欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA基础-操作符篇

程序员文章站 2022-04-28 13:18:22
一,算术操作符:常见算术操作符的常规用法省略(如:+, -, *, /, =, ==, %,)。赋值操作符 “ = ” 能操作所有对象。(下面有详细说)优先级:先乘除后加减,表达式较长或者其它操作符一律用多个括号() 盘它。赋值操作符“ = ”的使用:1.已命名变量(不能是常量) = 任意东西。2. ......

一,算术操作符:
常见算术操作符的常规用法省略(如:+, -, *, /, =, ==, %,)。
赋值操作符 “ = ” 能操作所有对象。(下面有详细说)
优先级:先乘除后加减,表达式较长或者其它操作符一律用多个括号() 盘它。
赋值操作符“ = ”的使用: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