プログラミングとjavaに関するseki-motoのブックマーク (3)

  • わかりずらい Java の参照渡し (3/3) (tec-q note)

    参照に対する勘違いを起こす理由として、Java のメソッドには「オブジェクトを操作するメソッド」と「オブジェクトを生成するメソッド」の 2 タイプあり、最もよく使われる String クラスに「オブジェクトを生成するメソッド」しかないことが挙げられると思います。 結論から言ってしまうと、String クラスに用意されているメソッドは、どのメソッドを使ってもオブジェクトそのものの値は変わりません。 言い換えると、オブジェクトそのものの値を変えることができません。そのようなメソッドが存在しないからです。 String クラスにはオブジェクトの値を元にした新しいオブジェクトを生成するメソッドしか存在しません。 先のサンプルAの test1 メソッドの内容を変えたサンプルCを例とします。サンプルC public class SampleC { public static void main(Str

  • わかりずらい Java の参照渡し (2/3) (tec-q note)

    String クラスの話の前に "オブジェクト参照" であることの説明を続けます。 先のサンプルAの String クラスを Vector クラスに変えたサンプルBを例とします。サンプルB public class SampleB { public static void main(String[] args) { Vector v1 = new Vector();    ・・・1 SampleB sampleB = new SampleB(); sampleB.test1(v1);       ・・・2 System.out.println(v1.size()); ・・・4 } public void test1(Vector v2) { v2.add("test1 メソッド実行"); ・・・3 } }3の Vector#add(Object) メソッドは Vector に要素を追加する

  • わかりずらい Java の参照渡し (1/3) (tec-q note)

    Java の引数はプリミティブ型であれば値渡し、オブジェクトであれば参照渡しというのは周知の事実です。 その参照渡しは "オブジェクトの参照" を渡すのですが、広く知られている "変数の参照" を渡す方法と区別されていないためか、しばしば混乱する場合があります。 例を挙げるとわかりやすいと思います。下のソースを見てください。サンプルA public class SampleA { public static void main(String[] args) { String s1 = "main メソッド実行"; ・・・1 SampleA sampleA = new SampleA(); sampleA.test1(s1);        ・・・2 System.out.println(s1);     ・・・4 } public void test1(String s2) { s2 =

  • 1