一个有关基本数据类型的题目

package com.sdjt.study.jibenleixing;

/**
 * @author:lyy
 * @version 创建时间:2009-8-4 下午06:13:11 类说明
 */
public class Test {
	public static void main(String[] args) {
		short s1 = 1;
		// 这一行代码会报编译错误
		// s1 = s1 + 1;
		// 这一行代码没有报错
		s1 = 1 + 1;
		// 这一行代码也没有报错
		s1 += 1;
	}
}

 在s1=s1+1;中,s1+1运算的结果是int型,把它赋值给一个short型变量s1,所以会报错;而在s1+=1;中,由于是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的结果,因此在使用+=、-=、*=、/=、%=等运算符时,要多加注意。

 

运算符对基本类型的影响
当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
1. 只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
2. 否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
3. 否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
4. 否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。

当使用“==”运算符在基本类型和其包装类对象之间比较时,遵循如下规则:
1. 只要两个操作数中有一个是基本类型,就是比较它们的数值是否相等。
2. 否则,就是判断这两个对象的内存地址是否相等,即是否是同一个对象。

package com.sdjt.study.jibenleixing;

/**
 * @author:lyy
 * @version 创建时间:2009-8-4 下午06:18:52 类说明
 */
public class EqualsTest {
	public static void main(String[] args) {
		// int类型用int类型初始化
		int int_int = 0;
		// int类型用Integer类型初始化
		int int_Integer = new Integer(0);
		// Integer类型用Integer类型初始化
		Integer Integer_Integer = new Integer(0);
		// Integer类型用int类型初始化
		Integer Integer_int = 0;
		System.out.println("int_int == int_Integer结果是:"
				+ (int_int == int_Integer));
		System.out.println("Integer_Integer == Integer_int结果是:"
				+ (Integer_Integer == Integer_int));
		System.out.println();
		System.out.println("int_int == Integer_Integer结果是:"
				+ (int_int == Integer_Integer));
		System.out.println("Integer_Integer == int_int结果是:"
				+ (Integer_Integer == int_int));
		System.out.println();
		// boolean类型用boolean类型初始化
		boolean boolean_boolean = true;
		// boolean类型用Boolean类型初始化
		boolean boolean_Boolean = new Boolean(true);
		// Boolean类型用Boolean类型初始化
		Boolean Boolean_Boolean = new Boolean(true);
		// Boolean类型用boolean类型初始化
		Boolean Boolean_boolean = true;
		System.out.println("boolean_boolean == boolean_Boolean结果是:"
				+ (boolean_boolean == boolean_Boolean));
		System.out.println("Boolean_Boolean == Boolean_boolean结果是:"
				+ (Boolean_Boolean == Boolean_boolean));
		System.out.println();
		System.out.println("boolean_boolean == Boolean_Boolean结果是:"
				+ (boolean_boolean == Boolean_Boolean));
		System.out.println("Boolean_Boolean == boolean_boolean结果是:"
				+ (Boolean_Boolean == boolean_boolean));
	}
}

 结果为:

int_int == int_Integer结果是:true
Integer_Integer == Integer_int结果是:false

int_int == Integer_Integer结果是:true
Integer_Integer == int_int结果是:true

boolean_boolean == boolean_Boolean结果是:true
Boolean_Boolean == Boolean_boolean结果是:false

boolean_boolean == Boolean_Boolean结果是:true
Boolean_Boolean == boolean_boolean结果是:true

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值