以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Java/Eclipse 』  (http://bbs.xml.org.cn/list.asp?boardid=41)
----  Java操作符重难点集锦[转帖]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=41&rootid=&id=52824)


--  作者:DMman
--  发布时间:9/18/2007 9:20:00 PM

--  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 类型转换

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


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms