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
上一篇: java后端面试