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》笔记

时间: 2024-08-19 03:08:42

java重载中的基本类型的自动类型转换的相关文章

我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换

今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static void main(String[] args) { int a=5; System.out.println("value is :"+((a<5)?10.9:9)); } } A.编译错误     B.10.9           C.9           D.以上答案都不对 我不假

JAVA数据类型中的char类型

1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a'; //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=111;//整数.0~65535.十进制.八进制.十六进制均可.输出字符编码表中对应的字符. 注:只能放单个字符. 3.char运算 char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值. 在JAVA中,对char类型字符运行时,直接当做ASCII表对应的整数来对待. 示例1: c

Java语言中 将double类型不以科学计数法输出

<span style="font-size:18px;"> Double double1 = 1234567899.899; DecimalFormat decimalFormat = new DecimalFormat("#,##0.00");//格式化设置 System.out.println("--------" + decimalFormat.format(double1)); System.out.println(doub

QT中|Qt::Tool类型窗口自动退出消息循环问题解决(setQuitOnLastWindowClosed必须设置为false,最后一个窗口不显示的时候,程序会退出消息循环)

为application 设置setQuitOnLastWindowClosed属性,确实为true: 将其显示为false; 退出该应该程序不能调用QDialog的close消息槽,只能调用qApp->exit(); a.setQuitOnLastWindowClosed(false); https://blog.csdn.net/lanhy999/article/details/8772408 原文地址:https://www.cnblogs.com/findumars/p/9525028.

时间、金钱在java、数据库中的变量类型之总结

在编写程序时,总是有些变量的类型搞不很明白,现将目前涉及到的变量总结一下: 1.“时间”类型 (1).在数据库中的变量类型是:DateTime 比如: operateTime DATETIME,//数据库中编写的字段类型 (2).在java程序中的变量类型是:Date 比如: private Date operatetime;// 操作时间 //set.get方法 public Date getOperatetime() { return operatetime; } public void s

SQL函数TIMEDIFF在Java程序中使用报错的问题分析

需求背景 (读者可略过)司机每天从早到晚都会去到不同的自动售货机上补货,而且补货次数和路线等也是因人而异,补货依据是由系统优化并指派.但是目前系统还无法实施有效指挥和优良的补货策略,司机的补货活动因此变得较为随意和散漫.为了有效跟踪司机补货,计算司机补货效率,也为了便于HR月底计算司机绩效,因此提出需求需要根据司机补货记录数据阶段性地计算出补货情况统计值. 需求中指出,按天按司机手机号为统计维度,需要统计司机当天总共补货的机器数(相同机器补多次也只能算一台机器):统计司机当天总共补货的次数(自然

Java泛型中extends和super的理解(转)

E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定的java类型(无限制通配符类型) S.U.V – 2nd.3rd.4th types Object – 是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T.E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换. ?

Java集合类中不实现Cloneable和Serializable原因

Java集合类中不实现Cloneable和Serializable原因 莫名的被问这么一个问题,也答不上,记录记录,为何Java集合类不实现Cloneable和Serializable接口. 1.Cloneable接口作用是将一个对象的属性值复制给另一个对象,而不是对象的一个引用. 2.Serializable接口作用(这个罗嗦一下) 2.1序列化的用途 1.有时候,如果想让一个对象持久的存储下来(存到磁盘),或者是进行远程的对象调用,那就要使用序列化实现这些作用. 我们必须对所有支持持久化存储

struts基于ognl的自动类型转换需要注意的地方

好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form action="registPro"> <s:textfield name="user.id" label="id"/> <s:textfield name="user.name" label="用户