Sun認定Java資格 実用情報 4 【SJC-P用】at PROG
Sun認定Java資格 実用情報 4 【SJC-P用】 - 暇つぶし2ch993:仕様書無しさん
08/03/16 21:14:41
①②が何を指すのか分からないんだが。a = ① b = ② で合ってるか?

a = b

と代入した時点で、aが参照しているArrayクラスと、
bが参照しているArrayクラスが一緒になる。
もともとaが参照してたArrayクラスは、(たぶん)ガベコレでサヨウナラだ。

((a=b)[a[3]]) :
 1. a = b -> b
 2. b[b[3]] -> b[3] -> 3

正確に書くんだったら、「Java言語仕様」でも参照しないとムリっぽ。
俺はあんな本全部覚えられるほど頭良くねえ。

994:仕様書無しさん
08/03/16 21:15:08
>>991
代入とかくと、

System.out.println(a[(a=b)[3]]);

以下と同じということになるか、と。
a=b;
System.out.println(a[a[3]]);

これとはちがうからねえ。
一行で表現される式内の一時オブジェクトに代入ということかな、と。

#あ、最初の回答者ではないんで。

995:仕様書無しさん
08/03/16 21:18:02
>>993
このあたりの基本文法構造は、CやC++でも同じでは?

996:986
08/03/16 21:27:27
正直Javaは数年触ってないから自信ないよねっと。

class Test {
 public static void main(String[] args) {
  
  // Arrayクラスは、Java君がどっかに領域作ってくれるんじゃね
  int[] a = { 11, 12, 13, 14 }; // aは、Arrayクラスの在処を覚えた
  int[] b = { 0, 1, 2, 3 }; // bは、Arrayクラスの在処を覚えた
  int[] c = null;
  
  // >>991 「シャローコピー」でググって説明を探すと大吉
  c = a; // aの指すArrayクラスの場所を、cに教えてやる
  a = b; // bの指すArrayクラスの場所を、aに教えてやる
  
  b[0] = 10000;
  System.out.println(a[0]); // b[0]と一緒
  System.out.println(b[0]);
  System.out.println(c[0]); // a[0]と一緒
 }
}

C:\test>javac Test.java
C:\test>java Test
10000
10000
11

997:991
08/03/16 21:41:21
>994
違いますよ~。
配列アクセスでは、ブラケット([])の式が評価される前に
ブラケット([])の前にある式が完全に評価される事が保障されています。
その評価された値は別の場所に記憶されます。
たとえば、
class Test {
 public static void main(String[] args) {
  int index = 1;
  try {
   skedaddle()[index=2]++;
  } catch(Exception e) {
   System.out.println(e + ", index=" + index);
  }
 }
 static int[] skedaddle() throws Exception {
  throw new Exception("Ciao");
 }
}
の結果は
java.lang.Exception: Ciao, index = 1
となります。
ブラケット[]の中の式は評価されていません。


998:仕様書無しさん
08/03/16 21:43:18
何だお前ら、珍しくjavaの話してるな・・・

999:986
08/03/16 21:47:25
>>991
正確には「a = b」は

 bが指しているArrayクラスの位置を、aに代入する

になる。
言い換えると「a = b」は

 a[0] = b[0];
 a[1] = b[1];
 a[2] = b[2];
 a[3] = b[3];

の代用にはならん。

後、揚げ足取られるとウザイんで、
何でもかんでも「正確じゃない」って書いてる。


1000:986
08/03/16 21:48:42
まるっこコピーが欲しいならArray#clone()だろうか。

class Test {
 public static void main(String[] args) {
  
  int[] a = { 11, 12, 13, 14 };
  int[] b = { 0, 1, 2, 3 };
  
  // 1. bと同じ内容のArrayクラスを作る
  // 2. aに、1で作ったArrayクラスの場所を教えてやる
  a = b.clone();
  
  b[0] = 10000;
  System.out.println(a[0]);
  System.out.println(b[0]);
 }
}

ハイ後は適当にヨロシク。あと次ぎスレへGO。

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch