20090408题目复习

1.各种数值类型对象的equals比较问题

		// 各种数值类型对象的equals比较问题
		// Integer型对象i
		Integer i = new Integer(42);
		// Long类型对象l
		Long l = new Long(42);
		// Double类型对象d
		Double d = new Double(42.0);
		// 编译报错:Incompatible operand types Integer and Long
		// System.out.println(i==l);
		// 编译报错:Incompatible operand types Integer and Double
		// System.out.println(i==d);
		// 编译报错:Incompatible operand types Long and Double
		// System.out.println(l==d);

		// 以下四句测试结果均为false,因为类型都不匹配,无法进行比较
		System.out.println(i.equals(l));
		System.out.println(i.equals(d));
		System.out.println(l.equals(d));
		System.out.println(l.equals(42));
		// 下句测试结果为true,因为42默认是int型,因为自动打包,变成了Integer类型
		System.out.println(i.equals(42));

测试结果:

false
false
false
false
true

 

相应源代码:

Integer类中的equals方法:

(只有相比较的两个对象都是Integer类型时,才继续进行值是否相等的比较,否则直接返回false)(20090414追加):

-》是啊,假如连类型都不一样,你还比较个啥劲啊?呵呵(20090507追加)

public boolean equals(Object obj) {
	if (obj instanceof Integer) {
	    return value == ((Integer)obj).intValue();
	}
	return false;
}

分析:

((Integer)obj).intValue()

先将被比较对象,强制类型转换成Integer类型,再使用intValue()方法求出它的值(20090414追加)。

 

Long类中的equals方法:

(只有相比较的两个对象都是Long类型时,才继续进行值是否相等的比较,否则直接返回false)(20090414追加):

public boolean equals(Object obj) {
	if (obj instanceof Long) {
	    return value == ((Long)obj).longValue();
	}
	return false;
}
 

 

 

2.强制类型转换问题

		// 强制类型转换问题
		short s1 = 1;
		//Type mismatch: cannot convert from int to short
		//s1 = s1 + 1;
		// 解决方案:从大(int)到小(short),需要加强制类型转换
		s1 = (short) (s1 + 1);
		short s2 = 1;
		// 这种写法没有问题,编译和运行均通过
		s2 += 1;
 

 

 

3.不同类型的数值进行四则运算时,类型自动转换

		// 不同类型的数值进行四则运算时,类型自动转换
		int x = 4;
		// 因为99.9默认是double类型,9和其做运算(比较),也会变成double类型,所以输出结果是9.0
		System.out.println("value is " + ((x > 4) ? 99.9 : 9));
		// 因为99默认是int类型,9和其做运算(比较),也会变成int类型,所以输出结果是9
		System.out.println("value is " + ((x > 4) ? 99 : 9));

 测试结果:

value is 9.0
value is 9

 

 

4.byte的存储范围是-128到127

		// byte的存储范围是-128到127
		byte b1 = (byte) 128;
		// 测试结果是-128
		System.out.println(b1);
		byte b2 = (byte) -129;
		// 测试结果是127
		System.out.println(b2);

 测试结果:

-128
127

 

 

5.String的equals测试:

		// 同一个字符串常量,测试结果是true
		System.out.println("george" == "george");
		// 编译错误:The left-hand side of an assignment must be a variable
		// System.out.println("george" = "george");、
		// 比较的是两个字符串的内容(尽管前者是存放在数据区的字符串常量,后者是存放在堆中的字符串变量),测试结果是true
		System.out.println("george".equals(new String("george")));
		// 比较地址,肯定就不相等了,测试结果是false
		System.out.println("george" == (new String("george")));

 测试结果:

true
true
false

-》编译错误:赋值表达式的左边应该是变量。(20090507追加)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值