My Photo
無料ブログはココログ

« June 2011 | Main | August 2014 »

はてなに行こうしますた

もしくはする予定
http://d.hatena.ne.jp/y05_net/

Javaでメソッドから複数変数を返すポインタ的使い方

毎回挙動を度忘れしてしまいHelloWorldサンプルPGを作って確かめるけどいいかげんその数分がもったいないのでかいとく


public class HelloWorld {
    public static void main(String[] args) {
	// ポインタとして受け取る配列数分確保
	String[] ptr = new String[1];
	new HelloWorld().returnPointer(ptr, 0);
	System.out.println(ptr[0]); // ="aaa"
    }
    public void returnPointer(String[] pointer, int allowedPos) {
	pointer[allowedPos] = "aaa";
    }
}

で、いつもやろうとしちゃうミス


public class HelloWorld {
    public static void main(String[] args) {
	String[] ptr = null;
	new HelloWorld().returnPointer(ptr);
	System.out.println(ptr[0]); // NullPointerException
    }
    public void returnPointer(String[] pointer) {
	// ローカルスコープのnewなのでこのメソッドから戻るとnull
	pointer = new String[1];
	pointer[0] = "aaa";
    }
}

ローカルスコープ内のnewは呼び出し元でそのまま保持できないんだよねー
※ちなみに呼び出し元でnullでなく、new String[]{"bbb"}とかすると、returnPointerの内容が無視されて"bbb"が出力される。。。

« June 2011 | Main | August 2014 »

Categories

  • Android Dev
  • グルメ・クッキング
  • ゲーム
  • プログラマ
  • 携帯・デジカメ
  • 日記・コラム・つぶやき
December 2021
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31