Java過載函式,當引數為null時,呼叫的處理
精確性原則
關於以下程式的輸出結果:
public class TestNull {
public void show(String a){
System.out.println("String");
}
public void show(Object o){
System.out.println("Object");
}
public static void main(String args[]){
TestMain t = new TestMain();
t.show(null);
}
}
輸出結果為:
string
解釋:主要是過載函式或建構函式呼叫時精確性的問題。
java是強型別語言,就是使用的時候要明確型別,如果不明確的話,編譯器會幫你做,它會呼叫他認為最合適的那個,編譯器也是程式,也是按照預先的規則執行。
Java的過載解析過程是以兩階段執行的。第一階段 選取所有可獲得並且可應用的方法或構造器。第二階段在第一階段選取的方法或構造器中選取最精確的一個。如果一個方法或構造器可以接受傳遞給另一個方法或構 造器的任何引數,那麼我們就說第一個方法比第二個方法缺乏精確性。
在我們的程式中,兩個構造器都是可獲得 並且可應用的。構造器Confusing(Object)可以接受任何傳遞給Confusing(double[ ])的引數,因此Confusing(Object)相對缺乏精確性。(每一個double陣列都是一個Object,但是每一個Object並不一定是 一個double陣列。)因此,最精確的構造器就是Confusing(double[ ]),這也就解釋了為什麼程式會產生這樣的輸出。
理解本謎題的關鍵在於在測試哪一個方法或構造器最精確。
要想用一個null引數來呼叫 Confusing(Object)構造器,你需要這樣寫程式碼:new Confusing((Object)null)。
相關推薦
Java過載函式,當引數為null時,呼叫的處理
精確性原則 關於以下程式的輸出結果: public class TestNull { public void show(String a){ System.out.println("String"); } public void show(Object o)
問題描述: 在使用mybatis對資料庫執行更新操作時,parameterType為某個具體的bean,而bean中傳入的引數為null時,丟擲異常如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mappin
C語言之定義一個函式,實現對字串做如下操作:當字元為字母時,大小寫互換,當字元為數字時,原樣輸出,當有其它字元出現時,結束操作,返回已處理的字串
Action(){ char str[]={"tEst234%^road"};int len = sizeof(str)/sizeof(char);//strTest2呼叫函式lr_output_message("%s",strTest2(str,len)); r
用mybatis更新資料,當資料為0時,無法更新
在bean中,count是long型別: private Long count; 需求就是利用下面的更新語句更新bills表中的count和amout <update id="updateBills" parameterType="map" >
關於輸入多組測試資料,當資料為0時,輸入結束
1.while(scanf("%d",&n)!=EOF) EOF在stdio.h中巨集定義為-1; 即有輸入時,迴圈繼續,其實,如無別的條件,一直會“輸入——處理”,“輸入——處理”的迴圈從而
vue-cli + router生成的專案,當mode為history時,直接在url中輸入地址頁面訪問404,或者重新整理頁面後404
有的時候,業務中會有一些需求,直接在其他地方,比如郵件中提供系統連結,通過點選一個url直接跳轉到我們的系統中來。 在本地開發時,直接輸入對應的url就可以訪問,但是當專案部署在伺服器之後,直接輸入url就會報錯404,這是因為router本身提供的就是一個 虛擬路徑,通過
java 反射: 當Timestamp型別的屬性值為null時,設定預設值
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Timestamp; class Person {
java 編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式1/1+1/3+...+1/n(利用指標函式)
題目: 編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+…+1/n,當輸入n為奇數時,呼叫函式1/1+1/3+…+1/n(利用指標函式) 程式碼: import java.util.S
當類的指標被賦值為NULL時,類的哪些成員還可以被該指標呼叫
轉自:https://blog.csdn.net/xiaoluer/article/details/53337292 該問題源自於一道面試題,題目如下所示: 看如下程式碼,請問能不能編譯通過?如果能編譯通過能不能執行成功?並說明原因 clas
Java的if判斷物件為null時,null放在比較運算子的左邊還是右邊較好?
如java中:if(name == null)和if(null == name)有什麼講究嗎? 答:在java裡面,它們是一樣的。但是通常寫為null == name。這其實是在C語言裡面引申出來的。 在C語言裡面,為了防止少敲一個等號,程式設計人員仍然能在編譯的時候找到錯誤。因為if(nam
Jackson 轉換JSON,SpringMVC ajax 輸出,當值為null或者空不輸出欄位@JsonInclude
當我們提供介面的時候, Ajax 返回的時候,當物件在轉換 JSON (序列化)的時候,值為Null 或者為“”的欄位還是輸出來了。看上去不優雅。 現在我敘述三種方式來控制這種情況。 註解的方式( @JsonInc
C#呼叫非託管函式引數為Void* 時,方法
This sample demonstrates how to pass data to an unmanaged function that expects a void pointer as an argument. The sample provides two solutions. The Voi
函式呼叫引數為指標時,實參跟形參的問題
#include<stdio.h> void change(int *p){ int val = 5; printf("%p\n", p); *p = val;
Mybatis:使用bean傳值,當傳入值為Null時,提示“無效的列型別”的解決辦法
提示: Try setting a different JdbcType forthis parameter or a differentjdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列型別: 1111
JS函式引數為物件時,如何呼叫
當JS函式的引數為物件時,呼叫時不能直接傳物件,而是要將物件使用者JSON轉換之後才能用,如下 特別要注意這個return "<button class='btn btn-primary btn-sm'' onclick='toEdit(" + JSON.stri
java中判斷物件為null時,null在前面還是後面
因為目前只學習並使用java語言,所以這裡主要是根據java來說的 Java中對null進行判斷放在前後沒有什麼區別,只是為了
spring boot加mybatis使用Map返回時,當值為空時屬性也會沒有(轉)
call pri per n-n spring fig setter 解決 strong 使用spring boot加mybatis時,設置Map返回,當值為空時屬性也會沒有,就會報錯 在application.properties中加入下面配置,將會解決這個問題。
Scala中當引數超過22時,通過實現Product特質
在使用Spark做某些專案時,可能對某寫資料進行分析時,會出現有很多欄位,而Scala中,預設的最大的引數個數是22,因此如果當我們的欄位太多時 ,22欄位不能滿足,我們可以同過實現Product這個特質,實現裡面的方法,可以傳更多的欄位 object Demo01 { def ma
c++中指向物件的指標為NULL時可以呼叫物件成員函式嗎
問題貌似有點奇怪,指標都為NULL了怎麼還可使用?但其實不是的,可以看以下程式碼: #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 void
gson或jackson實體的屬性為null時,序列化時保留該字串
Gson g = new GsonBuilder().serializeNulls().create(); ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Includ