Java编程思想----操作符

我就不把整本书的内容都写上来了,挑一些有用的写好了。

1,优先级

在优先级上面,我们最好还是使用()来显示出我们的优先级,这样既符合我们的业务代码的逻辑同时也不用去记那些繁琐的优先级顺序

2,赋值

说到赋值,我们一般使用操作符“=”来定义,意思为:用右边的值,把他复制给左边“。注意了,这里用了复制这个词,确实在操作基本类型的时候(注意String使用上和基本类型一样,但它是一个对象),我们是把一个变量的值复制给另外一个变量,虽然这些变量也是存储在堆栈当中的,但却和引用是不一样的,它的值也是存储在堆栈当中的。

int a = 1;
int b = 2;
a = b;
b = b + 1;

想想当b的值复制给a以后,a的值是多少,而b自加以后,a的值又是多少?都是2呗,学过python的小伙伴会发现这个和python不一样了。当a = b这个操作发生的时候,a的值变成了2,但a和b都是独立的内存的空间,当b进行自加时,这个和a没有半毛钱关系了。

但如果是对象进行这样的赋值时就不是这样子了。

Dog a = new Dog("a");
Dog b = new Dog("b");
Dog a = b;
System.out.println(a.name);
b.name = "c";

当a被b赋值后,a这个引用其实已经指向了b这个引用所指向的对象,所以我们输出a.name的时候得到的结果是“b“,而当b.name被修改后,a.name也变成了”c“了。因为我们是修改了a和b同时指向的对象的name这个成员属性的值,这样当我们再次通过a或者b来操作对象的name这个成员属性的时候就得到了修改后的值,这种在java中称之为:别名机制。

而这种情况也出现在方法的参数出传递上,如果是将一个基本类型作为参数传递进去,就是简单的复制赋值,而如果是将一个对象的传递进行就是在方法的作用域里面创建多一个引用来指向这个对象。

3,自增和自减

无论是自增还是自减都存在着前缀式和后缀式两种,那么两种又有什么区别呢?当使用前缀式的时候,格式:++i,先执行运算,再生成值。而后缀式,格式:i++,先执行生成值的操作,再执行运算。如果是在一个大的运算当中,需要体用到i的值的时候,前缀式操作会先对i执行自定义的操作,如:加,减等。而后缀式会先将现有的值给予运算,最后在执行自定义运算操作。

扫描二维码关注公众号,回复: 3393697 查看本文章

4,关系操作符

这里就是要明确==和equals的不同,如果你的类没有充血equals这个方法的话,那么==和equals都是判断两个对象是不是有相同的内存地址了,但一般的类我们都会重写equals来判断两个对象的内容(成员属性)是否相同就好了,如:String。而基本类型就直接==和!=来判断值是否相同就好了

5,逻辑操作符

这里需要注意的是短路运算,&&判断的是左右两边是否都是true,当两边都是true则返回true,但是当左边是false时,就不计算右边了,因为无论如何都不可能返回true了。而||判断的是左右两边只要一边为true就返回true,所以当左边为true时,就不计算右边了,直接返回true了。

6,+和+=的操作符重写的问题,当开头操作数是String类型的时候就连接符号

Stirng a = "123";
int b = 10;
System.out.println(a + b);
System.out.println(b + "" + a); 

输出的都是字符串,在操作的时候会自动将b转化成字符串。

7,强制类型转化

当一个高价数据类型想低阶数据类型转化时,需要强制类型转化。反之,则不需要了。什么是高阶数据类型呢,就是字节数占用较多的那个就是高阶了,比如long相对对int就是高阶了。

int a = 10;
long b = 20;
a = (int)b;
b = a;

8,截尾和舍入

当一个浮点数转化成整型的时候,java是不会帮我们四舍五入的,而是直接将小数点后面的舍去,就是截尾。这样会造成数据丢失,所以小伙伴在使用的使用要注意了。

而想要四舍五入的话,我们用到了java.lang.Math中的round()方法。

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/82869964