| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1907 人关注过本帖
标题:[原创]Java操作符重难点集锦
只看楼主 加入收藏
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
 问题点数:0 回复次数:9 
[原创]Java操作符重难点集锦

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 弑神饕餮 E-mail:yuanasheng@163.com QQ:468013111
*/ 时间: 2007-7-23 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

1 关系运算符==与equals()的区别

请大家看看先看下面的代码

public class A1 {
public static void main (String[] args) {
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1==n2);//结果false
System.out.println(n1.equals(n2));//结果true
}
}

为什么会出现这样的结果呢?因为关系运算符比较的是对象的引用,而equals()比较的是实际内容。

先别着急让我们接着看下面的例子

class B{
int i;
}

public class A2 {
public static void main (String[] args) {
B b1=new B();
B b2=new B();
b1.i=b2.i=100;
System.out.println(b1.equals(b2));//结果是false
}

}

结果是不是出乎你的意料呢?为什么明明用的是equals()而结果还是false呢?

原来equals()默认行为是比较引用,所以自己创建的类B的equals()实际上比较的是引用,之所以在上面可以比较实际内容是因为大多数java类库已将他重写。

2 短路

短路的意思是一个表达式计算到某部分时一旦能够准备无误确定整个表达式的值就不再计算表达式余下的部分了。且看下面的例子

public class A {
static int i=0;

static boolean b1(int a){
i++;
return a<1;
}

static boolean b2(int a){
i++;
return a<2;
}

static boolean b3(int a){
i++;
return a<3;
}

public static void main(String []args){
boolean b=b1(0)&&b2(2)&&b3(2);
System.out.println(i);
}

}

结果是2,如果说你觉得这样还不够清除的话,我再教你一个办法,你把b3中的i++去掉,再看看结果你就知道原来b3这个方法根本就没有调用了。

3 字符串操作符+

别以为这就没什么好说的不信你看看下面这个小程序,先别看答案,我估计肯定有做错的

public class A {
public static void main (String[] args) {
int a=0,b=1,c=2;
String s="abc";
System.out.println(s+a+b+c);//输出结果是什么?
}
}

输出结果是abc012

怎么样?有没有答案是abc3的如果有的话让我来告诉你为什么吧

因为如果表达式以一个字符串起头(本例中的s),那么后续所有操作数必须是字符串类型,若不是编译器则会帮你转换。

4 =和==

初学者(包括我在内)经常会把==写成=

例如while(a=b){...}很明显表达式的意图是判断a与b是否相等"=="而不是将b赋值给a

5 /与%

%只能对整数进行操作

/对整数操作则为整除,可能会给你的计算带来不必要的麻烦(当然带来的便捷也是大大的有)若不想整除则将任一操作数换为浮点型即可。

6 截尾与舍入

从float转换成int 例如1.6转换为int型会是1还是2呢?答案是1

那若想四舍五入呢?只要调用java.lang.math中的round()方法即可

7 类型转换

只想说一句:请务必注意“窄化转换”


[此贴子已经被作者于2007-7-23 20:33:24编辑过]

搜索更多相关主题的帖子: 操作符 Java 难点 集锦 中国 
2007-07-23 20:31
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
收藏
得分:0 
`原来equals()默认行为是比较引用,所以自己创建的类B的equals()实际上比较的是引用,之所以在上面可以比较实际内容是因为大多数java类库已将他重写。

这个有点不太理解


2007-07-23 23:07
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
收藏
得分:0 
挺不错的,尤其是前3个
2007-07-23 23:10
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
谢谢支持~~~

爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-24 11:43
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 

谢谢啊~~~没想到能被加精~~~


爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-25 14:27
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
收藏
得分:0 
QUOTE:
以下是引用弑神饕餮在2007-7-25 14:27:43的发言:

谢谢啊~~~没想到能被加精~~~

帮我解释一下我的疑问

2007-07-25 20:46
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(可可熊)`原来equals()默认行为是比较引用,所...
其实就是 object类中equals()方法默认行为就是比较的是对象的引用,比较对象的时候作用就和"=="完全一样,而java中大部分内置类如Integer等都已被重写,重写后的作用就是比较实际内容。。。这样说明白不?

爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-25 21:10
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
收藏
得分:0 
QUOTE:
以下是引用弑神饕餮在2007-7-25 21:10:00的发言:
其实就是   object类中equals()方法默认行为就是比较的是对象的引用,比较对象的时候作用就和"=="完全一样,而java中大部分内置类如Integer等都已被重写,重写后的作用就是比较实际内容。。。这样说明白不?

嗯,有点眉目了。

2007-07-26 08:14
无缘今生
Rank: 2
等 级:新手上路
威 望:3
帖 子:523
专家分:7
注 册:2007-6-25
收藏
得分:0 
以前一直不清楚“==”和equals()两者之间有什么不同,今天看了才知道。多谢楼主!

[此贴子已经被作者于2007-7-28 22:21:49编辑过]



时不再来!!!
2007-07-28 22:21
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(无缘今生)以前一直不清楚“==”和equals()两...

呵呵 这是对我最好的鼓励 它对大家有帮助也是我最想看到的~~


爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-28 23:26
快速回复:[原创]Java操作符重难点集锦
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028979 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved