在最底层,Java中的数据是通过使用操作符来操作的。
1.1更简单的打印语句
System.out.print("Hello World");
打印输出:Hello World
1.2使用Java操作符
操作符接受一个或者多个参数,并生成一个新的值。常见的操作符,加号(+)、减号(-)、乘号(*)、除号(/)以及赋值号(=)。
1.3优先级
当一个表达式中存在多个多个运算符的时候,先乘除后加减,有括号的先算括号中的。不过在程序中,需要注意”+”操作符。
System.out.println(1 + "1");
System.out.println(1 + 1);
System.out.println("hello" + "world");
输出值:
11
2
helloworld
"+"意味着“字符串连接”,并且如果有必要,他还要执行“字符串转换”。当编译器观察到一个String对象连接这个一个“+”,而这个“+”连接着一个非String类对象的元素时,就会尝试着将这个非String类型的元素转换为String。如上面看到的第一行代码,Integer类型的1连接一个“+”后再拼接一个String类型的“1”,结果是输出字符串“11”。
1.4赋值
赋值使用的事操作符“=”。和我们平时的理解是相反的,我们平时是“=”等号左边的值赋给右边;但是程序中“=”等号的意思是“取等号右边的值,把它赋值给左边”。右边的值可以使任何常数、变量或者表达式(只要能生成一个值就可以)。但是左边的必须是一个明确的已命名的变量。例如:a=1
不能将任何东西赋给一个常数,常数是不能做等号左边的值(反例:1=a)
1.5算术操作符
Java的基本算术操作符,加号(+)、减号(-)、乘号(*)、除号(/)以及取模(%)。
注:Java程序中的除号和现实的算术方法的区别在于,程序的除法使用整数相除的时候,在除不尽的情况下是不会有余数的,只会取整数,而且不是四舍五入的结果;如果是double或者float类型的值做除法的时候是可以计算到小数点后的。
取模(%)是从整数除法中取余数
System.out.println(10/3);
System.out.println(10%3);
System.out.println(10.0/3.0);
System.out.println(10f/3);
输出结果:
3
1
3.3333333333333333
3.3333333
一元操作符:一元加号(+)、一元减号(-)、一元乘号(*)、一元除号(/)和对应的二元加减乘除都是相同的番号。根据表达式的书写形式,编译器会自动判断出使用的哪一种。
例如: x -= a;可以转成 x = x - a; x +=b;可以转成 x = x + b;
x *= c; 可以转成 x = x * c; x /= d; 可以转成 x = x / d;
1.6 自动递增和递减
递增和递减是两种相当不错的快捷运算,递减操作符是“--”、递增操作符是“++”。 --a和a--都是表达同一个意思,就是a=a-1,递增同理。不过需要注意的事,操作符在前面和在后面的区别。通常在前面称为“前缀式”、在后面称为“后缀式”。区别在于符号在前面是先计算在生成值,符号在后面是先赋值在计算。例:
int a = 1;
int b = 1;
int c = 1;
int d = 1;
System.out.println("a " + ++a);
System.out.println("b " + b++);
System.out.println("c " + --c);
System.out.println("d " + d--);
输出:
a 2
b 1
c 0
d 1
1.7 关系操作符
关系操作符生成的事一个boolean结果,它们计算的事操作数的值之间的关系。如果关系是真的,表达式会生成true(真);如果广西不真实,则生成flase(假)。关系操作符包括.63.大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)。
注:等于和不等于适用于所有的基本数据类型,而其他比较符不适用于boolean类型。应为boolean值只能为true和false,大于、小于、大于等于、小于等于对boolean类型没有实际意义。
测试对象的等价性
关系操作符==和!=适用于所有对象,不过如果要对比两个对象或者值是否相同需要注意。
String str1 = "a";
String str2 = "a";
String str3 = new String("a");
String str4 = new String("a");
System.out.println("str1==str2 " + (str1==str2));
System.out.println("str1==str3 " + (str1==str3));
System.out.println("str3==str4 " + (str3==str4));
System.out.println("str1.equals(str3) " + (str1.equals(str3)));
输出:
str1==str2 true
str1==str3 false
str3==str4 false
str1.equals(str3) true
首先都是四个变量的值都是a,为什么输出的结果出现了false原因是,str1和str2变量存储的都是内存中的常量池的应用,这两个变量对应的a值是存在常量池中的,引用的是同一个常量池中的地址,所以str1==str2的时候输出true;str3和str4中的a值则是存在堆中的而且还是两个不同的区域,str3和str4保存的是堆地址的引用,所以str3==str4的时候输出是false。所以对象实际内容的比较的时候,推荐使用equals()方法;不过需要注意的是如果在自定义的类调用equals()方法的时候,需要重写equals()方法,不然使用这个方法会达不到我们想要的效果,还会出现问题。
1.8 逻辑操作符
逻辑操作符“与(&&)”、“或(||)”、“非(!)”能根据参数的逻辑关系,生成一个布尔值(true或false)。
System.out.println((1<2) && (1>3));
System.out.println((1<2) && (1<3));
System.out.println((1<2) || (1>3));
System.out.println((1<2) || (1<3));
System.out.println(1 != 2);
输出:
false
true
true
true
true
注意:如果在应该使用String值的地方使用了布尔值,布尔值会自动装换成适当的文本形式。
还需要注意按位与(&)、按位或(|)和与(&&)、或(||)的区别
与(&&)在执行过程中,多个条件任意一个为false则返回false,且判断逻辑条件不会向后执行;或(||)在执行过程中,多个条件任意一个为true则返回true,且判断逻辑条件不会向后执行。按位与(&)和按位或(|)的区别就在于,在满足条件后,它们还会向后执行判断逻辑条件,会将所有的逻辑条件执行完成后才会执行后面的步骤。例:
List<String> lists = null;
if(lists == null || lists.size() == 0){
System.out.println("集合为空");
}
输出:
集合为空
同样的判断逻辑,只是一个用了或(||)、一个用了按位或(|),出现不一样的结果。所以开发过程中需要慎用按位或(|)、按位与(&),推荐使用与(&&)、或(||),相比起来节约资源。
如有错误请指正,谢谢。