- PR -

第2回 Javaの変数の本質を知る の間違い

1
投稿者投稿内容
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-11-28 21:41
C言語をやったことのないJavaプログラマには良い解説ですね。

でも、間違いを発見しちゃいました。
コード:
public class CalcWithParams {
  public static void main( String args[] ) {
    
    int x;
    int y;
    
    x = 2;
    y = x^2 + 3;
    
    System.out.println(y);
  }
}


の中の、^は「べき乗」ではありません。ビット演算子で、XORです。この例では偶然 (2+3) XOR 2 = 2の二乗 + 3 = 7 になりますが間違いです。なお、^ よりも + の方が優先度が高いので、先に2+3が計算されますので、
1.2+3 = 5 (101)
2.5^2 = 7 (101 XOR 010 = 111)
となります。

あとこれはそんなにたいしたことがないことですが、Javaで使える型とそれぞれのサイズを示した図の中の 「1bytes」 は 「1byte」のはずです(複数ではなく単数)。
英-Ran
ベテラン
会議室デビュー日: 2002/06/12
投稿数: 55
投稿日時: 2002-11-28 22:13
この手の型やメモリの解説って言語の本ではあまり見かけないので楽しみです。
とはいえ、

> Java特有の型である「クラス型」「参照型」

という表現がよくわからない。「値型」と「参照型」(あと、あるとすれば「ポインタ」かな)というならわかるのですが。あるいは「primitive型」と「クラス型」と書くか。

「Java特有の型」という表現も違和感があります。近代的な言語でこれらの型がない方がむしろ珍しいように感じます。

今回の解説ではまったく触れられていなかったので、次回以降詳しい説明があるとは思いますが。

[ メッセージ編集済み 編集者: 英-Ran 編集日時 2002-11-29 00:52 ]
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-11-29 10:51
引用:

H2さんの書き込み (2002-11-28 21:41) より:

の中の、^は「べき乗」ではありません。ビット演算子で、XORです。この例では偶然 (2+3) XOR 2 = 2の二乗 + 3 = 7 になりますが間違いです。なお、^ よりも + の方が優先度が高いので、先に2+3が計算されますので、
1.2+3 = 5 (101)
2.5^2 = 7 (101 XOR 010 = 111)
となります。



ですね。
ちょっと、こういうレベルの間違いはいただけないです。
これが書籍だったらぼろくそに言われてしまうでしょう。

連載の先行きも不安ですが、@ITの編集体制にも不安が……
らきゅ
常連さん
会議室デビュー日: 2002/11/08
投稿数: 20
投稿日時: 2002-11-29 13:40
引用:

DaikiRyutoさんの書き込み (2002-11-29 10:51) より:

ちょっと、こういうレベルの間違いはいただけないです。
これが書籍だったらぼろくそに言われてしまうでしょう。


私は昔Cの書籍の誤で派手に躓いた経験があるので
猜疑心(感覚的には恐怖心に近いかも)で読めなくなってしまいます。
引用:

連載の先行きも不安ですが、@ITの編集体制にも不安が……


夕べ元記事より先にH2さんのこのスレを読んだのですが
まだ直って無いんですね…

まさに今JAVAを始めたばかりだっただけに残念です。
jack_pma
常連さん
会議室デビュー日: 2002/11/15
投稿数: 35
お住まい・勤務地: 埼玉
投稿日時: 2002-11-29 15:17
>まだ直って無いんですね…
べき乗そのものの演算子ってないし、Math.powとかをこういう基本的な説明してるところでいきなり使うと混乱しそうだし、例文の意味自体を直さなきゃいけないんで結構悩むところなのかも知れませんね、けど直さないとまずいですけど

^がべき乗な言語って私はBASICしか知らないんですが、多いんですか?
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-11-29 15:41
> ^がべき乗な言語って私はBASICしか知らないんですが、多いんですか?
私が知っているのではHaskellがありますねぇ。他は何があるんでしょう。

4年前、私が始めて触った言語がHaskellで、その次に習ったのがJavaでした。JavaでHaskellと同じように ^ を使ったら、全然違う結果が出てきてしまい数時間迷い続けたのを覚えています。Math.pow()を使わないといけないと知ったときにはちょっと面倒だなぁと思いましたよ。
tom
@ITエディタ
会議室デビュー日: 2001/07/27
投稿数: 55
お住まい・勤務地: Tokyo
投稿日時: 2002-11-29 16:31
Java Solution担当の宮下と申します。

皆様のご指摘のとおり、Javaにはべき乗の演算子は存在しません。
根本的な間違いを含んだまま公開してしまいましたことを深くお詫び申し上げます。
記事は訂正し、再公開させていただいております。

また、『Java特有の型である「クラス型」「参照型」』という表現についてですが、
参照型の下位概念としてクラス型、配列型、インターフェース型があるというこ
とからしますと、「プリミティブ型とクラス型」という対応関係になりますので、
並べることに不適切な点はたしかにございました。
ですが、ここでの意図は、VBやCOBOL、ASPやPerlといったスクリプト言語から
Javaに入ってきた人にとっては始めての概念であるという意味で、
「Java特有の」という表現を使わせていただきました。
ここを「オブジェクト指向言語特有の」と表現すべきとの議論もあると
思いますが、連載の最初から「オブジェクト指向言語」という固い表現
を使いたくないという筆者の意図がございました。

この度は、特に初心者の皆様にご迷惑となる内容でありましたことを
深くお詫び申し上げます。
今後、公開前の査読を厳密に行ってまいります。

今後ともJava Solutionフォーラムをご愛読いただきますよう
よろしくお願い申し上げます。

Java Solution担当
宮下知起


1

スキルアップ/キャリアアップ(JOB@IT)