トップページ⇒tech
1001コメント273KB

★★Java質問・相談スレッド165★★

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/20(日) 19:30:39.35
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0147デフォルトの名無しさん2013/10/30(水) 20:24:06.34
>>146
そりゃ実装でなくて概念で理解しないとハマるだろうけど。C言語使いに多い気がする。
0148デフォルトの名無しさん2013/10/30(水) 20:33:40.69
IDE使ってると頭つかわねーからな、コマンドラインにうつるととまどう
0149デフォルトの名無しさん2013/10/30(水) 21:46:23.58
javaはc#の生産性に勝てるかい?
.netばかりやっている上司を論破できるのか、俺にはそれが問題だ!!
0150デフォルトの名無しさん2013/10/30(水) 21:56:10.97
そうかよかったね
0151デフォルトの名無しさん2013/10/30(水) 22:37:28.70
>>149
ビジネスモデルや開発手法を無視してそう。
C#ってCI(継続的開発)ツールって使えるの?
0152デフォルトの名無しさん2013/10/30(水) 22:43:04.43
馬鹿にかまうなよ
0153デフォルトの名無しさん2013/10/31(木) 00:01:09.18
>>149
JavaかC#かは関係ない。
コレクションやオブジェクト関係のメソッドを知ってるか、知ってないかの差が大きい。
0154デフォルトの名無しさん2013/10/31(木) 00:26:08.92
意味不明
0155デフォルトの名無しさん2013/10/31(木) 00:58:31.27
>>154
ハッシュコードの概念とかequalsメソッドの意味
知らないとリストを回してGetしはじめる
0156デフォルトの名無しさん2013/10/31(木) 01:00:04.85
ダメなプロジェクトは
Equalsメソッドとハッシュコードの自動生成をやってない
0157デフォルトの名無しさん2013/10/31(木) 01:06:23.15
自動生成ってEclipseの?
0158デフォルトの名無しさん2013/10/31(木) 01:07:19.30
>>155
意味不明2
0159デフォルトの名無しさん2013/10/31(木) 01:09:35.53
>>157
フレームワークでも、Eclipseでもどっでも良いんじゃないの?
フレームワークならアノテーションつけといてAntやAPTでDTOの自動生成とか。
0160デフォルトの名無しさん2013/10/31(木) 01:18:00.11
自動生成しないとどうなるの?
0161デフォルトの名無しさん2013/10/31(木) 01:29:31.58
>>160
List、Mapの機能で本来の機能を果たさなくなる。
0162デフォルトの名無しさん2013/10/31(木) 02:05:01.97
そんなバカな
0163デフォルトの名無しさん2013/10/31(木) 02:06:31.66
Objectに実装されてるequals()とhashCode()で通常は十分っしょ
0164デフォルトの名無しさん2013/10/31(木) 02:07:26.98
同じ内部データを持つクラスを同一として扱いたいのならオーバーライドは必要だけど
0165デフォルトの名無しさん2013/10/31(木) 02:18:10.49
ObjectはIDベースだろ。フィールド毎に等値性が必要ならオーバーライド必須
0166デフォルトの名無しさん2013/10/31(木) 02:22:37.11
前提を後付けされても。
0167デフォルトの名無しさん2013/10/31(木) 02:38:49.36
いつからMapはhashCode()の呼び出しが必須になったんだよ。
0168デフォルトの名無しさん2013/10/31(木) 02:55:50.58
>>167
オブジェクトをキーにputすると、取り出せない。
0169デフォルトの名無しさん2013/10/31(木) 02:57:44.38
そろそろ豪快な空振り三振くるぞ。
0170デフォルトの名無しさん2013/10/31(木) 03:02:31.47
EnumMapサイコー。なぜC#に無いのか不思議。
0171デフォルトの名無しさん2013/10/31(木) 03:02:34.60
IDベースってなに?
0172デフォルトの名無しさん2013/10/31(木) 03:06:57.49
ジャバはオワコンなんだからもういいじゃないですかあ><
0173デフォルトの名無しさん2013/10/31(木) 03:11:38.95
>>168
インスタンス作り直してキーにする使い方するのにequalsやhashcodeをオーバーライドしない奴とかいたら根本理解が足りてないとしか言いようがないな
0174デフォルトの名無しさん2013/10/31(木) 03:18:02.38
君は勉強不足
0175デフォルトの名無しさん2013/10/31(木) 03:32:54.92
自前クラスをキーに使うなんてやったことないから知らんなあ
0176デフォルトの名無しさん2013/10/31(木) 03:42:33.98
そもそもequalsをオーバーライドしない理由がない。==で比較すれば同じ結果だからequalsをIDで比較する必要がない。
equalsをオーバーライドしたら、hash codeもオーバーライドする。
0177デフォルトの名無しさん2013/10/31(木) 03:46:48.71
equalsやhashcodeを必要とする使い方しないクラスも無駄にオーバーライドしてそう
0178デフォルトの名無しさん2013/10/31(木) 03:48:16.93
さっきからIDって何なんだよ、APIドキュメントにもIDについて書かれてないぞ
0179デフォルトの名無しさん2013/10/31(木) 03:50:10.31
保有する値が同じだろうと別のオブジェクトとして扱いたいとき内部値で比較するequalsやhashcodeをオーバーライドとかして余計なことをしそう
0180デフォルトの名無しさん2013/10/31(木) 03:50:46.61
昔ハッシュでツリー構造作ってたアホがいたなぁ。パフォーマンスは最悪。
0181デフォルトの名無しさん2013/10/31(木) 03:51:30.76
スライムAとスライムBのHPが同じ値になったらスライムが1匹減るという仕様
0182デフォルトの名無しさん2013/10/31(木) 03:59:23.91
>>161,168
MapやListはただのインターフェースなので
実装は作り手の自由であり、作り手が必ずしもhashCodeを使うと言うわけでは無い
0183デフォルトの名無しさん2013/10/31(木) 04:07:08.77
バカにはムリw
0184デフォルトの名無しさん2013/10/31(木) 04:09:47.39
Collections (Java Platform SE 7)
http://docs.oracle.com/javase/jp/7/api/java/util/Collections.html

これがええんとちゃうの
0185デフォルトの名無しさん2013/10/31(木) 04:45:39.65
オブジェクトはIDだよおっかさん
0186デフォルトの名無しさん2013/10/31(木) 05:24:46.53
だからIDって記述ないってば
0187デフォルトの名無しさん2013/10/31(木) 05:26:11.41
メモリアドレスはIDにはなりません。別のオブジェクトが同じアドレスに再割り当てされることもあるからです
0188デフォルトの名無しさん2013/10/31(木) 06:33:59.63
知的障害者には優しくしないとな。
ID = identifier = 一意識別子 = 他と被らない名称
0189デフォルトの名無しさん2013/10/31(木) 06:44:19.21
オブジェクトのID知らない奴超雑魚
0190デフォルトの名無しさん2013/10/31(木) 07:17:52.57
>>189
荒らすな雑魚
0191デフォルトの名無しさん2013/10/31(木) 09:40:47.72
httpheadersのmapなんてnullがキーなんだぜ
なんで取り出せないと思ったのか
0192デフォルトの名無しさん2013/10/31(木) 16:23:04.87
Objectのfinalizeってデストラクタと同じ?
0193デフォルトの名無しさん2013/10/31(木) 18:14:42.08
ちがう

いつ呼び出されるか分からない
書くだけでGCによるメモリ開放が遅れてパフォーマンスに悪影響が出る

重要な外部リソースの開放は自分でやるかCloseableインターフェースを使うべきだし
外部リソースを持たないなら書くだけ無駄だし
基本的にはいらない子
0194デフォルトの名無しさん2013/10/31(木) 18:18:00.34
>>192
つかわない
0195デフォルトの名無しさん2013/10/31(木) 18:21:03.57
3.10.5 java.lang.Object.finalize()についての注意事項
http://software.fujitsu.com/jp/manual/manualfiles/M080037/J2S21060/02Z2A/note03/note0088.htm
0196デフォルトの名無しさん2013/10/31(木) 18:21:43.61
【Java】GCとfinalizeメソッドの関係 - 16bit!
http://sakuramochi702.hatenablog.com/entry/2013/06/03/125052
0197デフォルトの名無しさん2013/10/31(木) 18:22:53.61
>>195
不治痛だしsolarisだろう
0198デフォルトの名無しさん2013/10/31(木) 18:24:04.91
現場から学ぶWebアプリ開発のトラブルハック(9):JavaのGC頻度に惑わされた年末年始の苦いメモリ (3/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0712/27/news081_3.html
0199デフォルトの名無しさん2013/11/01(金) 01:05:00.96
javaにRAIIをってのはどうなったの?
0200デフォルトの名無しさん2013/11/01(金) 01:11:25.44
try with resourcesでお茶を濁して終了
0201デフォルトの名無しさん2013/11/01(金) 01:29:11.36
お前ら基本が出来てなさすぎ

>>188
この場合はidentifierじゃなくてidentity。Object#equalsとObject#hashCodeの汎用規約はidentityと決まってる。
だからequivalencyが必要な時オーバーライドするんだろうがggr
ttps://www.google.com/webhp?q=java+equals+identity&safe=off

>>182
collections frameworkの実装はHashMap以外にもObject#hashCode使ってる。(List実装は使ってないけど)
Object#equalsをオーバーライドするとき常に一緒にオーバーライドするのがObject#hashCodeの要件だし、
Object#hashCodeはObject#equalsがfalseのときでも同じハッシュ返してもいいからObject#equalsがfalseのとき常に違う値返すようにしないとパフォーマンス悪い。

>>187
ハードウェアでノイズ生成でもしないと必ず一意になる値は生成不可能だから一般的にはダブる確率が低くてコストも低いメモリアドレスで代用する。
openjdkの実装もそうなってるしjavadocにも記述されてるからラッパークラスのキャッシュと同じでAPI側の仕様。

>>191
nullのidentity hashは必ず0と決まってるからnull時の動作は別途記述がない限り定義済み。
collections frameworkの実装は基本的にnullableだから>>168の話とnullは関係ない。
0202デフォルトの名無しさん2013/11/01(金) 01:33:28.49
>>199
project sumatraでGPUと共有するメモリをGPUが使い終わるまでGCしないようにVMに変更入った。
RAII自体はとっくの昔に方向性が変わって成果物はtry with resourcesとその他諸々になってる。
0203デフォルトの名無しさん2013/11/01(金) 01:56:35.26
>>201
野良ライブラリ作った奴がMapやListの実装にequalsやhashCode使ってるかは分からないだろJK
0204デフォルトの名無しさん2013/11/01(金) 02:02:07.60
>>201
細かいやつだな。キーを定義しなおすほど潔癖症なのかそれともHashMapをHashSetと勘違いしてないかい?
0205デフォルトの名無しさん2013/11/01(金) 02:36:52.95
hash codeは完全一意に作れるわけじゃないのでIDの定義には当てはまりません
hash codeに求められるのは一様に分布することです
0206デフォルトの名無しさん2013/11/01(金) 02:51:38.69
>>201
そーゆーのはブログでやって
0207デフォルトの名無しさん2013/11/01(金) 07:59:02.46
>>201
http://d.hatena.ne.jp/chiheisen/20120318/1332071962 によると、
デフォルトではメモリアドレスじゃなくて乱数使ってるっぽいが。
0208デフォルトの名無しさん2013/11/01(金) 09:24:13.31
>>201のどこが間違ってるのかわからん
お前らは自分のチンケな自尊心を守るために難癖つけてるだけだろう
0209デフォルトの名無しさん2013/11/01(金) 11:00:19.43
チンケな自尊心を持つのは>>201本人w
0210デフォルトの名無しさん2013/11/01(金) 12:42:06.83
>>201はきっと職場でも浮いた存在なんだろうな
0211デフォルトの名無しさん2013/11/01(金) 15:45:43.26
>>207

Object - hashCode() (Java Platform SE 7)
http://docs.oracle.com/javase/jp/7/api/java/lang/Object.html#hashCode()
> これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されます

Object - hashCode() (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/lang/Object.html#hashCode()
> 通常、これはオブジェクトの内部アドレスを整数値に変換する形で実装されます

Object - hashCode() (Java 2 Platform SE 5.0)
http://docs.oracle.com/javase/jp/1.5.0/api/java/lang/Object.html#hashCode()
> 通常、これはオブジェクトの内部アドレスを整数値に変換する形で実装されます
0212デフォルトの名無しさん2013/11/01(金) 15:46:39.29
※通常
0213デフォルトの名無しさん2013/11/01(金) 15:49:18.39
16bitマシンや64bitマシンではメモリアドレスを返すという仕様は満たせない
0214デフォルトの名無しさん2013/11/01(金) 16:01:54.36
Object - hashCode() (Java 2 プラットフォーム SE v1.4.0)
http://docs.oracle.com/javase/jp/1.4/api/java/lang/Object.html#hashCode()
> 通常、これはオブジェクトの内部アドレスを整数値に変換する形で実装されます
0215デフォルトの名無しさん2013/11/01(金) 16:07:47.10
>>211
へんなところで文章切るなよ。

> (これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されますが、
> この実装テクニックは JavaTM プログラミング言語では必要ありません。)
0216デフォルトの名無しさん2013/11/01(金) 16:07:59.73
Java 2 Platform SE 1.3: クラス Object - hashCode()
http://docs.oracle.com/javase/jp/1.3/api/java/lang/Object.html#hashCode()
> 通常、これはオブジェクトの内部アドレスを整数値に変換する形で実装されます
0217デフォルトの名無しさん2013/11/01(金) 16:09:48.44
> この実装テクニックは JavaTM プログラミング言語では必要ありません

これはオーバーライドするときに内部アドレスのこと気にせずにオーバーライドできるよって意味だろJK
0218デフォルトの名無しさん2013/11/01(金) 16:14:56.95
Java言語では必要ありません、に対しての通常なわけだから
「他の言語では内部アドレスを整数に変換することによって実装されますが」と同等の意味だろう。

普通に読めば。
0219デフォルトの名無しさん2013/11/01(金) 16:16:11.57
ObjectのhashCode()の実装はJavaで書かれてません
0220デフォルトの名無しさん2013/11/01(金) 16:18:22.78
しかも1.2の頃から確認できる文だからなぁ。10数年前は一般的だったテクニックだったっつー事だね。
0221デフォルトの名無しさん2013/11/01(金) 16:19:16.50
>>218
どうしてこんな頭の悪い奴ほど主張が強いのだろう。
0222デフォルトの名無しさん2013/11/01(金) 16:20:19.00
Javaで書かれてないけどデフォルトでは os::random() 呼んでるからなぁ。
02232212013/11/01(金) 16:22:31.29
アンカーミス>>218ではなく>>216
0224デフォルトの名無しさん2013/11/01(金) 16:22:39.22
っつかVMのソースコードからデフォルトで乱数使ってるの判明してんのに、さすがに見苦しいわ。
0225デフォルトの名無しさん2013/11/01(金) 16:23:18.01
偶数しか返さないhashCode()、とか、やだなあ。おい
0226デフォルトの名無しさん2013/11/01(金) 16:23:50.84
そりゃ内部アドレスを返してたらセキュリティ的に危ないだろJK
0227デフォルトの名無しさん2013/11/01(金) 16:27:31.81
JDKのインスト―ルフォルダ内にあるsrc.zip
0228デフォルトの名無しさん2013/11/01(金) 16:39:40.93
>>227
今回の Object#hashCode() の場合はネイティブだからそれ見ても無駄。
0229デフォルトの名無しさん2013/11/01(金) 16:43:33.77
これやれば分かる

Object[] obj = new Object[200];
for (int i = 0; i < obj.length; i++) {
  obj[i] = new Object();
  System.out.printf("%d %d\n", obj[i].hashCode(), obj[i].hashCode());
}
0230デフォルトの名無しさん2013/11/01(金) 16:56:13.81
はい、この話はこれでオシマイ、次の質問どうぞー
0231デフォルトの名無しさん2013/11/01(金) 16:59:34.57
おーばーらいどってなんですかー?
0232デフォルトの名無しさん2013/11/01(金) 17:09:36.54
おーらいおーらい
0233デフォルトの名無しさん2013/11/01(金) 17:11:01.03
>>229
やったお
http://ideone.com/vYNDS4
0234デフォルトの名無しさん2013/11/01(金) 17:25:23.65
>>207
おもしろい実験だな
0235デフォルトの名無しさん2013/11/01(金) 17:34:31.67
勉強になったので記録させていただいた

http://www54.atwiki.jp/projecthikky/pages/40.html
0236デフォルトの名無しさん2013/11/01(金) 17:54:32.32
本来の争点からズレてないか?hashCodeのオーバーライドについて話してたんじゃなかったのか?
0237デフォルトの名無しさん2013/11/01(金) 18:54:18.47
オブジェクトはIDだよおっかさん
0238デフォルトの名無しさん2013/11/01(金) 18:56:50.44
乱数はID
0239デフォルトの名無しさん2013/11/01(金) 21:48:01.12
論破完了
0240デフォルトの名無しさん2013/11/01(金) 21:54:21.91
>>151-
この辺りからの流れか、えらく続いてるな
もうループしてるだけだろ
0241デフォルトの名無しさん2013/11/01(金) 21:55:43.29
iPad air ほぢい
0242デフォルトの名無しさん2013/11/02(土) 01:25:29.23
>>201
そーゆーのはブログでやれよ雑魚
0243デフォルトの名無しさん2013/11/02(土) 01:27:33.65
馬鹿には無理
0244デフォルトの名無しさん2013/11/02(土) 01:37:04.66
eclipseでメソッドのヘルプをeclipseについてるブラウザで閲覧しようとしたところ、
eclipseごと固まってしまいました。

1時間ほどの作業を保存していないので、
消えるとショックなんですが、
復元機能はついてますか?
0245デフォルトの名無しさん2013/11/02(土) 01:39:15.54
こちらへどうぞ。
eclipse総合
http://toro.2ch.net/test/read.cgi/tech/1361510049/l50
0246デフォルトの名無しさん2013/11/02(土) 03:00:39.61
>>172
■ このスレッドは過去ログ倉庫に格納されています