java运算符

public class TypeCast {

	public static void main(String[] args) {
		short i1 = 10;
		short i2 = 20;
		i1 = (short) (i1 + i2);	//必须显式cast 回short,否则编译错误
		i1 = (short) (i1 >> 2);
		i1 += i2;		//+=运算符会自动将运算结果cast为 运算符左边的类型,所以不需要显式cast
		int i3 = 100;
		i3 = (int) (i3 + 100L);	//当运算数类型比int大时,运算结果转换为较大的类型
		
        	System.out.println(new Integer(1) == 1);
        	System.out.println(new Integer(1) != 1);
        	System.out.println(new Integer(1) != 2);
        	System.out.println(new Integer(1) > 1);
        	System.out.println(new Integer(1) >= 1);
        	System.out.println(new Integer(1) < 1);
        	System.out.println(new Integer(1) <= 1);
        
        	System.out.println("=======================");
        	Integer obj = new Integer(1);
        	System.out.println(obj == new Integer(1));
        	System.out.println(obj != new Integer(1));
        
        	System.out.println(obj > new Integer(1));
        	System.out.println(obj >= new Integer(1));
        	System.out.println(obj < new Integer(1));
        	System.out.println(obj <= new Integer(1));
        
        	System.out.println("=======================");
        	System.out.println(new Boolean(null));
        	System.out.println(new Boolean(""));
        	System.out.println(new Boolean("obj"));
        	System.out.println(new Boolean("false"));
        	System.out.println(new Boolean("true"));
        	System.out.println(new Boolean("TRUE"));

        	System.out.println("=======================");
        	Integer obj1 = 1; //相当于Integer.valueOf(1)
        	Integer obj2 = Integer.valueOf(1);
        
        	System.out.println(obj1 == obj2);
        	System.out.println(obj1 != obj2);
        	System.out.println(obj1 == new Integer(1));
        
        	System.out.println(obj1 > new Integer(1));
        	System.out.println(obj1 >= new Integer(1));
        
        	System.out.println(obj1 < new Integer(1));
        	System.out.println(obj1 <= new Integer(1));
        
        	//常量赋值相当于使用Integer.valueOf(int),该方法会缓存对象实例,
        	//相同常量的多次调用返回的是同一个封箱对象。
        	//This method will always cache values in the range -128 to 127
        	Integer obj3 = 1024;
        	Integer obj4 = 1024;
        	System.out.println(obj3 == obj4);

        	System.out.println("=======================");
        	String str = null
        	System.out.println(str instanceof String);
        	//编译错误:
        	//System.out.println(new TypeCast() instanceof String);
        	//编译通过,但运行期会抛出异常ClassCastException
        	TypeCast tc = (TypeCast) new Object();
	}
}

 输出为:

true
false
true
false
true
false
true
=======================
false
true
false
true
false
true
=======================
false
false
false
false
true
true

 =======================
true
false
false
false
true
false
true
false

 =======================

false

 

     Java语言规范规定,复合赋值(E1 op= E2)等价于简单赋值(E1 = (T) ((E1) op (E2))),其中T是E1的类型。

    * 假若对基本数据类型执行任何算术或按位运算,只要它们“比int 小”(即char,byte 或者short),
      那么在正式执行运算之前,那些值会自动转换成int。这样一来,最终生成的值就是int 类型。
      当把一个int类型运算结果赋回较小的类型,就必须使用“造型”。
      此外,由于是将值赋回给较小的类型,所以可能出现信息丢失的情况。
    * 通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。
    * 若将一个float 值与一个double 值相乘,结果就是double;如将一个int 和一个long 值相加,则结果

       为long。

 

    * 逻辑运算符:== != 和 >  >=  <  <=
    * (1) 在其中一个运算项是基本数据类型时,自动拆箱。
    * (2) 运算项都是封箱对象时,==  != 比较对象引用, > >= < <= 会自动拆箱。

 

    * Java 的判等操作符(==和!=)在作用于对象引用时,执行的是引用ID 的比较,而不是值的比较。

       这是为了兼容5.0以前版本。
    * 判等操作符在其两个操作数中只有一个是被包装的数字类型,而另一个是原始类型时,执行的确实是

      数值比较。这种比较在5.0以前是非法的,所以不会出现不兼容。

 

    * 常量赋值相当于使用Integer.valueOf(int),该方法会缓存对象实例,相同常量的多次调用返回的是

      同一个封箱对象。  


    * Boolean的构造函数Boolean(String name)  return (name != null) && name.equalsIgnoreCase("true")

 

    * instanceof运算符:

      尽管null 对于每一个引用类型来说都是其子类型,但是instanceof 操作符被定义为在其左操作数为null

      时返回false。这被证明是实践中非常有用的行为。如果instanceof 告诉你一个对象引用是某个特定类

      型的实例,那么你就可以将其转型为该类型,并调用该类型的方法,而不用担心会抛出

      ClassCastException 或NullPointerException 异常。

      instanceof 操作符有这样的要求:如果两个操作数的类型都是类,其中一个必须是另一个的子类型。

      所以,new TypeCast() instanceof String是非法的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值