Java编程思想[二]操作符

来源:互联网 发布:约瑟夫问题 c语言 编辑:程序博客网 时间:2024/06/05 17:09

程序是写给人看的,不是写给机器看的!

 

一、操作符

+ :  加号或正号

- :  减号或负号

* : 乘

 / : 除

= : 赋值

1.优先级(与数学中的优先级相似)

若String后面紧跟一个“+”,若后面跟的为非String类型的元素,则会尝试将这个非String类型的元素转换为String

2.赋值(=)

1)取右边的值,把它复制给左边的值。

   右值只要是一个值就好,左值必须是一个明确的、已命名的变量。即:左值必须有一个物理空间可以存储等号右边的值。但不能把任何东西都赋给一个常数,常数不能作为左值(1=a)。

2)基本数据类型与对象的赋值

基本数据类型:基本数据类型存储了实际的数值,并非指向一个对象的引用,在为其赋值时,可以直接将一个地方的内容复制到另一个地方。(即a=b,a=c,此时,不会改变b的值)

  对象的赋值:对一个对象进行赋值,操作的是对象的引用(即a=b,a=c,因为是abc是对象,b引用指向a,值会跟着a的改变而改变,也叫别名现象) 如:

示例一:

public class Test4 {public static void main(String[] args) {Tank t1 = new Tank();Tank t2 = new Tank();t1.level = 9;t2.level = 47;/* * 947 * 简单的赋值操作 */System.out.println("tank1.level = " + t1.level + "tank2.level = " + t2.level);t1 = t2;/* * 4747 * 将t2赋值给t1,并将t2的引用从t2指向了t1,所以,后面t1修改之后,t2的值也会跟着修改 * 而原本指向t2的不再被引用的对象会被GC自动清理 */System.out.println("tank1.level = " + t1.level + "tank2.level = " + t2.level);t1.level = 27;/* * 2727 * 因为上文t2引用指向了t1,所以,t1修改,t2值也会修改 */System.out.println("tank1.level = " + t1.level + "tank2.level = " + t2.level);}}public class Tank {int level;}<span style="color:#ff0000;"></span>
示例二:

public class Test6 {static void f(Letter l){l.c = 'z';}public static void main(String[] args) {Letter x = new Letter();//将Letter实例化,并赋值为ax.c = 'a';System.out.println(" x.c = " + x.c);//调用本类中的静态方法f(Letter l),将Letter中c的引用指向自己,即zf(x);System.out.println(" x.c = " + x.c);}}public class Letter {char c;}


二、算术操作符

多一个:% 取余

生成一个随机数,可以通过Random方法。

<span style="white-space:pre"></span>//47作为种子,目的使展示的输出都尽可能一致(用于随机数生成器的初始化值,随机数生成器对于特定的种子值总是产生相同的随机数序列)<span style="white-space:pre"></span>Random random = new Random(47);

三、自增(++)与自减(--)

前缀式:++a或--a

后缀式:a++或a--

区别:前缀式先执行运算,再生成值;后缀式先生成值,后运算。

public class Test7 {public static void main(String[] args) {int i = 1;System.out.println("i :" + i);//1System.out.println("++i :" + ++i);//2   原因:先运算,变为2,再赋值,输出System.out.println("i++ :" + i++);//2 原因:先赋值,为2,输出,再运算,变为3System.out.println(i);//3System.out.println("--i :" + --i);//2原因:先运算,为2,再赋值,输出System.out.println("i-- :" + i--);//2原因:先赋值,为2,输出,再运算,变为1System.out.println(i);//1}}

四、关系运算符

小于<  大于>  小于等于<=  大于等于>=  

== !=

其中,==与!=比较的是对象的引用

若想比较两个对象的实际内容是否相同,可通过重写equals()方法来实现,若不重写,equals()默认的行为比较的也是引用。(equals()具体后面章节有详解)

 

五、逻辑操作符

1.短路

若(a>b) && (c>d),”&&”左边为false,则不再执行后面的操作,直接跳出。

若(a>b)  ||  (c>d),” || ”左边为true,则不再执行后面操作,直接跳出

所以,假如逻辑表达式有一部分不必计算,将会获得潜在的性能的提升

 

六、三元运算符

boolean-exp ? value1 : value2  

若boolean-exp 为true,则执行value1;若为false,执行value2。

不能频繁使用。

 

七、数据类型转换

隐式转换byteshortchar--->int--->long--->float--->double

   byte,short,char相互之间不转换,他们参与运算首先转换为int类型。

强制转换:目标类型 名称= (目标类型)需要强转的数据;

示例:

<span style="white-space:pre"></span>byte b1=3,b2=4,b;<span style="white-space:pre"></span>b=b1+b2;<span style="white-space:pre"></span>b=3+4;
哪句是编译失败的呢?为什么呢?

b=b1+b2; 因为byte进行运算时,要先转换为int型,而b是byte型,所以编译失败。


0 0
原创粉丝点击