5 运算符
5.1 == equal() eq()
object Test {
def main(args: Array[String]): Unit = {
var a1 = "abc"
var a2 = "abc"
println(a1 == a2) // true
val a3 = new String("abc")
val a4 = new String("abc")
println(a3 == a4) // true
println(a3.equals(a4)) // true
println(a3.eq(a4)) //false
}
}
在scala中的 == 其实是做了非空校验的equals();见下图:
在scala中要进行内存地址的比较呢?用eq()
在java中:
public class Test1 {
public static void main(String[] args) {
String a1 = new String("abc");
String a2 = new String("abc");
System.out.println(a1 == a2); //false
}
}
5.3 demo1
public class Test1 {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); //true
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4); //false
}
}
在Integer中,在【-128-127】之内的判断两个数是相等的。
自动装箱底层其是调用了Integer.Valueof。而Integer.valueof中就是限定了low=-128;high=127
5.3 ++ –
++ 和 – 容易出现错误,所以scala没有这样的语法,采用 += 方式来替代。
a = a++; 第一步:_val = i++ 第二步:i = _val
public class Test1 {
public static void main(String[] args) {
int i = 0;
int j = i++;
int a = 0;
a = a++
System.out.println(j); //j = 0
System.out.println(a); //a = 0
}
}
5.4 逻辑运算
& 逻辑与
&& 短路与
public static boolean isNotEmpty(String s) {
//逻辑与 错
//短路与 对
return s != null & !s.trim().equals("");
//return s != null && s.trim().equals("");
}
5.5 运算符的本质
- scala是完全面向对象的语言,所以数字其实也是对象。
public static void main(String[] args) {
10;//错,因为java中每一行,都必须是一个操作。
new String; //对,因为new对象是一个操作。
}
def main(args: Array[String]): Unit = {
10// 这样不会报错。因为数字也是一个对象。
}
scala中其实是没有运算符的,所有运算符都是方法。
- 当调用对象的方法时,点.可以省略
- 如果函数参数只有一个,或者没有参数,()可以省略。
object Test {
def main(args: Array[String]): Unit = {
//val i = 10 .+(10)
//val i = 10 +(10)
val i = 10 + 10
}
}
object Test {
def main(args: Array[String]): Unit = {
val a = 10
// val b = a.toString()
// val b = a.toString
val b = a toString
println(b)
1 to 10
}
}