基本的なデータ型に関するテーマ

3445 ワード

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;
	}
}

s 1=s 1+1;で、s 1+1演算の結果はint型で、それをshort型変数s 1に付与するので、エラーが発生します.一方、s 1+=1では、で、s 1はshortタイプなので、1はまず強制的にshortタイプに変換されてから演算に参加し、結果もshortタイプなので、エラーは報告されません.では、s 1=1+1;どうして間違いを報告しないのですか.これは,1+1はコンパイル時に決定できる定数であり,「+」演算はプログラム実行時ではなくコンパイル時に実行されるため,この文の効果はs 1=2に等しいため,エラーは報告されない.前述したように、基本タイプに対して強制タイプ変換を実行するとエラーの結果になる可能性があるので、+=、-=、*=、/=、%=などの演算子を使用する場合は注意してください.
 
基本タイプに対する演算子の影響+、-、*、/、%演算子を使用して基本タイプを演算する場合は、次のルールに従います.2つのオペランドのうち1つがdoubleタイプであれば、もう1つはdoubleタイプに変換され、結果もdoubleタイプです.2.そうでなければ、2つのオペランドのうちの1つがfloatタイプであれば、もう1つはfloatタイプに変換され、結果もfloatタイプである.3.そうでなければ、2つのオペランドのうちの1つがlongタイプであれば、もう1つはlongタイプに変換され、結果もlongタイプである.4.そうでない場合、byte、short、int、charを含む2つのオペランドはintタイプに変換され、結果もintタイプに変換されます.+=、-=、*=、/=、%=、演算子を使用して基本タイプを演算する場合、•演算子の右の値は、まず演算子の左の値と同じタイプに強制的に変換され、演算が実行され、演算結果は演算子の左の値タイプと同じになります.
「==」演算子を使用して、基本タイプとパッケージクラスオブジェクトを比較する場合は、次のルールに従います.2つのオペランドのうち1つが基本タイプである限り、それらの数値が等しいかどうかを比較します.2.そうでなければ、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結果:trueInteger_Integer == Integer_int結果:false
int_int == Integer_Integer結果:trueInteger_Integer == int_int結果:true
boolean_boolean == boolean_Booleanの結果は:trueBoolean_Boolean == Boolean_booleanの結果はfalse
boolean_boolean == Boolean_Booleanの結果は:trueBoolean_Boolean == boolean_booleanの結果は:true