java重载中的基本类型的自动类型转换

  1.  当传递到函数的参数的数据类型表示的范围小于函数形参的参数类型遵循如下原则 :
    1. char类型比较特殊, 直接转换为int:  char ->int ->long->float->double
    2. 其他的基本数据类型都遵循这个规则: byte->short->int->long->float->double
    3. 如果是整型常量: int->long->float->double
    4. 浮点型常量: 比如0.5等没有明确指出是何种类型的常量. 直接处理成double类型, 而不是float
    5. 如果希望是某一种明确的类型, 最后显示地给出, 比如0.5F,0.5f.0.5D,1L等等.
  2.  当传递导函数的参数类型表示的范围大于函数形参的参数类型, 那么就必须显示地进行窄化转换
package BaseType;

public class OverloadTest 
{
	void f1(byte x){	System.out.println("f1(byte)") ;	}
	void f1(char x){	System.out.println("f1(char)") ;	}
	void f1(short x){	System.out.println("f1(short)") ;	}
	void f1(int x) {	System.out.println("f1(int)") ;	}
	void f1(float x){	System.out.println("f1(float)") ;	}
	void f1(double x){	System.out.println("f1(double)") ;	}
	void f1(long x){	System.out.println("f1(long)") ;	}

	void f2(byte x){	System.out.println("f2(byte)") ;	}
	void f2(short x){	System.out.println("f2(short)") ;	}
	void f2(int x) {	System.out.println("f2(int)") ;	}
	void f2(float x){	System.out.println("f2(float)") ;	}
	void f2(double x){	System.out.println("f2(double)") ;	}
	void f2(long x){	System.out.println("f2(long)") ;	}

	void f3(short x){	System.out.println("f3(short)") ;	}
	void f3(int x) {	System.out.println("f3(int)") ;	}
	void f3(float x){	System.out.println("f3(float)") ;	}
	void f3(double x){	System.out.println("f3(double)") ;	}
	void f3(long x){	System.out.println("f3(long)") ;	}

	void f4(int x) {	System.out.println("f4(int)") ;	}
	void f4(float x){	System.out.println("f4(float)") ;	}
	void f4(double x){	System.out.println("f4(double)") ;	}
	void f4(long x){	System.out.println("f4(long)") ;	}

	void f5(float x){	System.out.println("f5(float)") ;	}
	void f5(double x){	System.out.println("f5(double)") ;	}
	void f5(long x){	System.out.println("f5(long)") ;	}

	void f6(float x){	System.out.println("f6(float)") ;	}
	void f6(double x){	System.out.println("f6(double)") ;	}
	
	void f7(double x){  System.out.println("f6(double)") ;  }
	
	void f8(char x){	System.out.println("f8(char)") ;	}
	void f8(byte x){	System.out.println("f8(byte)") ;	}
	void f8(int x) {	System.out.println("f8(int)") ;	}
	void f8(float x){	System.out.println("f8(float)") ;	}
	void f8(double x){	System.out.println("f8(double)") ;	}
	void f8(long x){	System.out.println("f8(long)") ;	}
	
	void f9(float x){System.out.println("f9 float");}
	
	void testConstVal()
	{
		System.out.println("5: ") ;
		f1(5) ;	f2(5) ;	f3(5) ;	f4(5) ;	f5(5) ;	f6(5) ;	f7(5) ;
		System.out.println() ;
	}
	
	void testChar()
	{
		char x = ‘x‘ ;
		System.out.println("char x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testByte()
	{
		byte x = 0 ;
		System.out.println("byte x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testShort()
	{
		short x = 0 ;
		System.out.println("short x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testInt()
	{
		int x = 0 ;
		System.out.println("int x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testLong()
	{
		long x = 0 ;
		System.out.println("long x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testFloat()
	{
		float x = 0 ;
		System.out.println("float x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	void testDouble()
	{
		double x = 0 ;
		System.out.println("double x: ") ;
		f1(x) ;	f2(x) ;	f3(x) ;	f4(x) ;	f5(x) ;	f6(x) ;	f7(x) ;
		System.out.println() ;	
	}
	
	public static void main(String args[])
	{
		OverloadTest t = new OverloadTest() ;
		t.testConstVal();
		t.testByte();
		t.testChar();
		t.testShort();
		t.testInt();
		t.testLong();
		t.testFloat();
		t.testDouble();
		
		double d = 0.9d ;
	  //  t.f9(d) ; 这么写是错误的
		t.f9((float)d) ; //必须显示地进行窄化转换
	}

}

  //代码来自《thingking in java》。

  //《thinking in java》笔记

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。