スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Integer[]型(ラッパクラス配列)について

あ、Javaについて書くの初めてじゃん。びっくり。
僕がRPGのキャラクターならデフォルト装備はJavaです。
Javaが一番好きです。
Project Lambda以前だとラムダ使えなくて無名インスタンス使うことになるのも、
JavaFX以前だと(JavaFX使ったことないけど)GUIアプリケーションを作る場合コード量がえげつないことになるのも、
全て許容して「好き」だと言えます!

Javaちゃんまじ天使。
俺の心にフォーリンラブ…、愛して私の例外安全…Oh, Year...


本題
  1. ラッパクラス配列と基本型配列の非互換について
  2. ラッパクラス配列をnewで確保した場合

小話です。
当たり前のことを当たり前のように語るので、ソウルジェムの濁りに注意しつつ閲覧してください。
見てってね!


1. ラッパクラス配列と基本型配列の非互換について
Integer[] wNums = new Integer[2];
int[] pNums = wNums; // もちろんコンパイルエラー

int[] pNums = (int[])wNums;  // コンパイルエラー


関係ないですがもちろん
wNums[0] = new Integer(10);
int num = wNums[0];

は通ります、自動的にアンボクシングがかかってますので。
いいですよね、オートアンボクシング。
以上。

2.ラッパクラス配列をnewで確保した場合
上でもちょっと利用していますが、
Integer配列を確保した場合は各配列要素もnewで領域確保しなければいけないようです。
Integer[] wNums = new Integer[2];
wNums[0] = 10; // ぬるぽ

みんな大好きぬるぽさん、ことNullPointerExceptionが送出されます。
これだとオートボクシングが働いてないんですかね、不思議です。
もちろんこれだとオートボクシングが働きます。
Integer num = 10;

不思議ですねー。
配列オブジェクト化した時点で一般的なクラス配列オブジェクトと同じ解釈をされてしまうんでしょうか。


そしてそして、もちろん一々newするのは面倒ですので、あらかじめ領域を確保しておけばおっけーです。
Integer[] wNums = { 0, 0 };
wNums[0] = 10; // OK

これは0だった領域を10で上書きするという行為なので、問題ありません。

以上。

そして以上。


いえいえ、なんかこの関係性が面白くてついブログネタにしてしまったのですよ、ふふふふふ。
スポンサーサイト

拡張For文とForEach文

------------------------------------------------------------------------------------------------------------
aiya_000 : C++には拡張for文algorithmヘッダのfor_each文、2つのForEachがあって、
そうなるとJavaも内部イテレータ、外部イテレータ2つのForEach文があるとも言えなくもないから
日本語で言うときは拡張For文と言うことにしてます。 [[ 17:09]]
------------------------------------------------------------------------------------------------------------
aiya_000 : 他は普通にForEach文とか、外部イテレータとか。 [[ 17:09]]
------------------------------------------------------------------------------------------------------------
aiya_000 : 継承関係もコンポジット関係もないクラスで自クラスのイテレータを回す場合のことを
「外部イテレータを用いる」っていうらしいよ。 [[ 17:12]]
------------------------------------------------------------------------------------------------------------
aiya_000 : 僕は外部イテレータの利点が分からないので、使ったことがありません。
まぁ…内部イテレータも使ったことありませんけどね…。 [[ 17:13]]
------------------------------------------------------------------------------------------------------------
aiya_000 : 参考:
http://d.hatena.ne.jp/kaiseh/20090225/1235560788 [[ 17:13]]
------------------------------------------------------------------------------------------------------------

なぜ人は自分のつぶやきをまとめておきたくなるのだろう…。

フィールドにメンバ関数を参照する関数ポインタを含める

毎度恒例、なんかあいやさんがつぶやいてるだけの記事です。
下から上へ読んでいってください…。(手抜きごめんなさい)
あ、コピペにはTweetVim使ってます。

参考にさせていただいたサイト様
http://www.geocities.jp/ky_webid/cpp/language/034.html


13 -------------------------------------------------------------------------------------------------- 14 aiya_000 : いらんかもしれないけどメンバ関数ポインタ変数のコールバックです。
15 https://t.co/QHgmvzq77w 05:47
16 -------------------------------------------------------------------------------------------------- 17 aiya_000 : ということで、
18 「あいやはまた一歩進化を遂げた!!」 05:44
19 -------------------------------------------------------------------------------------------------- 30 aiya_000 : 余談だけどクラスや構造体(C++)に列挙体を含んだ場合、
31 staticにしなくとも勝手にHoge.Aとかいうアクセスの仕方ができる。
32 staticつけてもできる。 05:40
33 -------------------------------------------------------------------------------------------------- 34 aiya_000 : このstatic修飾子は「enum Foo」ではなく、フィールド「m_enum」に掛かる。 05:39
35 -------------------------------------------------------------------------------------------------- 36 aiya_000 : これは
37 struct Hoge {
38 static enum Foo {
39 A, B, C
40 } m_enum;
41 };
42 とした場合の「static」の掛かり方に似ているね。 05:39
43 -------------------------------------------------------------------------------------------------- 44 aiya_000 : するとすれば
45 *ins.p
46 という表現になる。
47 もちろんこの場合の間接アクセス演算子「*」は「p」にかかっている。
48 「ins.p」自体がins内のpを表しているので、
49 *insの中のp変数を表すことにはならない。 05:36
50 -------------------------------------------------------------------------------------------------- 51 aiya_000 : .*演算子と->*演算子を勘違いしていたよ。
52 これらは
53 インスタンスinsがメンバ*pを持つ場合の表現「ins.*p」ではなかったんだね、
54 この表現はできない。「.*演算子」自体が特別な役割を持っているから。 05:35
55 -------------------------------------------------------------------------------------------------- 56 aiya_000 : ああ、できた。 05:33
57 -------------------------------------------------------------------------------------------------- 58 aiya_000 : うーん、メンバ関数からメンバ関数ポインタ変数にアドレスを取ってこれないなあ。
59 うーん。 04:51
60 -------------------------------------------------------------------------------------------------- 61 aiya_000 : ラムダ式型を代入できなければ、
62 voidを列挙すればいい。
63 それができる、オブジェクト指向ならね。 http://t.co/Rg54n0iscn 04:23
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。