Java编程思想[二]操作符

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

 

一、操作符

+ :  加号或正号

- :  减号或负号

* : 乘

 / : 除

= : 赋值

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;
		/*
		 * 9		47
		 * 简单的赋值操作
		 */
		System.out.println("tank1.level = " + t1.level + "tank2.level = " + t2.level);
		
		t1 = t2;
		/*
		 * 47	47
		 * 将t2赋值给t1,并将t2的引用从t2指向了t1,所以,后面t1修改之后,t2的值也会跟着修改
		 * 而原本指向t2的不再被引用的对象会被GC自动清理
		 */
		System.out.println("tank1.level = " + t1.level + "tank2.level = " + t2.level);
		
		t1.level = 27;
		/*
		 * 27	27
		 * 因为上文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实例化,并赋值为a
		x.c = 'a';
		System.out.println(" x.c = " + x.c);
		//调用本类中的静态方法f(Letter l),将Letter中c的引用指向自己,即z
		f(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);	//1
		System.out.println("++i :" + ++i);	//2   原因:先运算,变为2,再赋值,输出
		System.out.println("i++ :" + i++);	//2	 原因:先赋值,为2,输出,再运算,变为3
		System.out.println(i);	//3
		System.out.println("--i :" + --i);	//2	原因:先运算,为2,再赋值,输出
		System.out.println("i-- :" + i--);	//2	原因:先赋值,为2,输出,再运算,变为1
		System.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型,所以编译失败。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值