Java基础入门-操作符

在最底层,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("集合为空");
}

输出:
集合为空

同样的判断逻辑,只是一个用了或(||)、一个用了按位或(|),出现不一样的结果。所以开发过程中需要慎用按位或(|)、按位与(&),推荐使用与(&&)、或(||),相比起来节约资源。

如有错误请指正,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_33369215/article/details/53454364