Java操作符及执行流程控制

发表于:2013-8-15 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李艺辉    来源:51Testing软件测试网采编

分享:

  demo:PassObject.java

package javabase.flowcontrol;

class Letter{
 char c;
}
public class PassObject {
 /**
  *对象引用
  */
 static void f(Letter y){
  y.c = 'z';
 }
 public static void main(String[] args) {
  Letter x = new Letter();
  x.c = 'a';
  System.out.println("before:x.c = " + x.c);
  f(x);
  System.out.println("after:x.c = " + x.c);
 }
}
/*输出结果:
before:x.c = a
after:x.c = z
*/

  此类对于传递对象引用而引起的问题在Think In Java被称做”别名问题”

  使用中应注意此类陷阱

  ++或--:前缀++/--先运算再生成值,后缀++/--先生成值再运算

  ==与equals:

  比较2个实际值是否相等:对象用equals,基本数据类型用==

  比较对象的地址是否相等:对象/基本数据类型都用==

  demo:EqualsTest.java

package javabase.flowcontrol;

class ValueInt{
 int id;
}
class ValueString{
 String id;
 @Override
 public boolean equals(Object obj) {
  boolean instanceFlag;
  instanceFlag = obj instanceof ValueString;
  if(!instanceFlag)
   return super.equals(obj);
  else{
   ValueString vTemp = (ValueString)obj;
   if(vTemp.id.equals(this.id)){
    return true;
   }
  return false;
  }
 }
}
public class EqualsTest {
 /**
  * ==操作符、equals的区别
  */
 public static void main(String[] args) {
  //基本数据类型
  int i1 = 100;
  int i2 = 100;
  System.out.println("i1 == i2 : " + (i1 == i2));
  //对象
  Integer n1 = new Integer(250);
  Integer n2 = new Integer(250);
  System.out.println("n1 == n2 : " + (n1 == n2));
  System.out.println("n1 equals n2 : " + n1.equals(n2));
  //自定义对象
  ValueInt vInt1 = new ValueInt();
  ValueInt vInt2 = new ValueInt();
  vInt1.id = vInt2.id = 32;
  System.out.println("vInt1 == vInt2 : " + (vInt1 == vInt2));
  System.out.println("vInt1 equals vInt2 : " + vInt1.equals(vInt2));
  ValueString vString1 = new ValueString();
  ValueString vString2 = new ValueString();
  vString1.id = vString2.id = "李艺辉";
  System.out.println("vString1 == vString2 : " + (vString1 == vString2));
  System.out.println("vString1 equals vString2 : " + vString1.equals(vString2));
  //String 对象比较复杂,后面会有String对象的详细解析
  
 }
}
/*输出结果:
i1 == i2 : true
n1 == n2 : false
n1 equals n2 : true
vInt1 == vInt2 : false
vInt1 equals vInt2 : false //这是因为equals默认行为是比较2个对象的引用
vString1 == vString2 : false
vString1 equals vString2 : true //复写该对象的equals方法后的比较
*/

  逻辑操作符:&&、||、!

  逻辑操作只可以应用于布尔值,注意逻辑操作的”短路”情况

  test(1) && test(2) && test(3) //顺序判断,只要前面有一个test为假后面的判断就不需要执行了

  test(1) || test(2) || test(3)  //顺序判断,只要前面有一个test为真后面的判断就不需要执行了

  按位操作符:位与(&)、位或(|)、位非(~)、

  有符号位左移(<<):低位补0

  有符号位右移(>>):若符号为正则高位补0,若符号为负则高位补1

  无符号位左移(<<<):无论正负低位全部补0

  无符号位右移(>>>):无论正负高位全部补0

  如果对char、byte、short类型数值进行移位处理,那么在移位之前它们都将先被转换为int类型,

  并且得到的结果也是int类型,且移位后的数值结果只有低5位才有用(int类型为2的5次方)

32/3<123>
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号