top

請問關於常數及基本型別變數可直接指派給Object變數

想請教各位高手 如以下code:

int x=4;

Object obj=new Object();

obj=8;

obj=x;

都是可以通過comile和執行的

但autoboxing小弟只知是指派給對應之wrapper class型別之變數才會發生

那請問這樣指派給wrapper class之父類別也就是object物件亦算是autoboxing嗎?

且這樣的指派算是多型嗎?

另外想請問關於autounboxing之發生情況

正常是當要取用值時就會自動發生

但若是如下:

public class AutoBoxDemo2 {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;

        if (i1 == i2)
            System.out.println("i1 == i2");
        else
            System.out.println("i1 != i2");
    }
}

比得又會變為變數內所含之物件參考指標

但像用println方法印出

又會autounboxing

請問他autoboxing/autounboxing發生之情況是?


謝謝!

是的!



autoboxing 為 Integer 實例後,再指定給 Object 的 reference name … 就這邊只是 is-a 的關 ...
caterpillar 發表於 2015-1-23 08:08



非常感謝您的解答!

如果直接指派給對應之包裹類別之父類別物件亦會發生auto-boxing

那請問這是auto-boxing除了基本對於基本型別及其對應包裹類別之轉型外唯一之特例嗎?

但這種子類別物件被指派給父類別型別變數之方式不是應該就是多型嗎?is a kind of?

另外關於auto-unboxing的部分 小弟目前知道如additive/assignment operator及流程控制等 皆會自動發生auto-boxing,

但想弄清楚的是到底有哪些特例是如==一樣不會自動發生?

另外關於印出wrapper class物件時應該是印出toString方法小弟知道

只是因為他是直接印出原本的值 這麼說應該是Interger類別override object類別之toString方法 並改為印出該物件所autoboxing之變數值囉?

謝謝!

TOP

回復 4# caterpillar


管理員朋友 感謝您一直認真地回小弟的文@@在此給您鞠躬了

關於問題一 若不是特例 但據小弟自己研究 好像也只有這種多型應用會autoboxing,其餘如Long L=5;

這時就不會幫你將常數轉為long型別在做autoboxing 因此這不算是特例嗎?

(實在因為要考證照 才無奈要研究這些無聊的細節OTZ)

問題二的部分 請問您所說之公開協定是指?呼叫obj多型物件之toString方法?


問題三的部分 overloading的確在引數為wrapper class物件時 若沒有完全對應之參數 而參數從基本型別開始時, 始會自動unboxing並從對應之基本型別開始往上找,但小弟指的是如正常運算式 皆會自動unboxing 但又有那些如運算中會像==這樣 仍維持對物件就是比較其參考指標 而不會unboxing去比較其值的例子?

謝謝!

TOP