Java

JJUG CCC 2014 Fall ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2014 Fall に行ってきました! 今回は、前回とちょっと変わって、技術的な話だけでなくビジネス的な話もあってすごい面白かったです! (JJUG CCC なのに、Javaの話はあんまりないですよーw っていうお断りをたびたび聞きましたw)ちょっと意外でし…

Java8 で java.lang.Object#hashCode() の生成アルゴリズムが変更されていました。

java.lang.Object#hashCode()の性質という記事で書いたのですが、Java の Object#hashCode() の値はただの乱数となっています。 この乱数のアルゴリズムが、Java SE 8 で「線形合同法」から「XORシフト方式」に変更になっていました。 といっても、変更され…

JJUG CCC 2014 Spring ( #jjug_ccc ) - セッション資料の一覧

JJUG CCC 2014 Spring に行ってきました!最初はフルに参加すると時間が長くてしんどいかなーと思ったんですが、そんなのが気にならないぐらい感覚的に短い一日でした。 ブログや本で読むよりも濃くて新しい話が聞けてとても楽しかったです。 (個人的に、JV…

Java8 で StringBuilder/StringBuffer クラスがリファクタリングされていました。

ついに Java SE 8 がリリースされました! そこで、早速ダウンロードして、Java 8 のソースコード(src.zip)を Java 7と比較してみたところ、公表はされていないのですが、ちょこちょことリファクタリングされていることがわかりました。そこで、そのうち Str…

Java8 で String クラスに join メソッドが追加されていました

Java8 で String クラスに、static な join メソッドが追加されていました。 使い方はとってもシンプル。 String message = String.join("-", "Java", "is", "cool"); // message には "Java-is-cool" が代入されています。 引数に、任意の数の CharSequence…

Java 7 Update 40 で修正されたバグ

2013年9月10日に出た Java 7 Update 40 は Limited Update (セキュリティ修正を含まないバグ修正と新機能のリリース) でした。 そのリリースノートを見てみると、いくつか面白い(?)バグがあったので、調べてみました。 EnumMap: クローン時のバグ修正 En…

JavaとC#で、フィールドの初期化順序が違う (JavaプログラマーがC#でプログラムを書いて引っかかったところ その5)

C# の本を読んでいたら、クラスのフィールドの初期化順序が Java と違っていてびっくりしました。 Java のフィールド初期化順序 Java でインスタンスを作成した場合、親クラスのフィールド初期化 → 親クラスのコンストラクタ実行 → 子クラスのフィールド初期…

Java の配列要素数の上限

Java で配列を生成する際に、どこまで大きい要素数を指定できるかは、Java VMの実装によるみたいです。 なので、Oracle の Java VM ではメモリが十分にあっても、次のコードは必ずエラーになります。 int[] max = new int[Integer.MAX_VALUE]; じゃあ、メモ…

「null」をフラグとして使うのは、やめた方がいい

null をフラグとして使うのは、やめた方がいいと思います。 null は、ただ変数が初期化されていないことを表しているだけです。 この意味以外で、null を使わない方がいいと思います。 null をフラグとして使う 「null をフラグとして使う」というのは、「nu…

Java7 の例外ハンドリングの改善による非互換性

ひとつ前の記事で紹介した Java SE 7 and JDK 7 Compatibility - Oracle のなかに、面白い非互換性がありました。 Synopsis: Improved Exception Handling May Cause source Incompatibility 概要: 例外ハンドリングの改善が原因のソース非互換性 Java SE 7 …

Java6 と Java7 の互換性

Java6 のサポート期限が今月末(2013年2月)で切れます。 その前に、Java6 から Java7 への移行をしなくてはなりません。 そこで参考になるのがこのページ。 Java SE 7 and JDK 7 Compatibility - Oracle 基本的に Java は上位互換があるので、 Java6 と Jav…

JavaとC#で、文字列と null を結合したときの結果が違う (JavaプログラマーがC#でプログラムを書いて引っかかったところ その4)

Java と C# で、文字列と null を結合したときの結果が違います。 // Java System.out.println("abc," + null); // C# Console.WriteLine("abc," + null); Java の場合、結果は「 abc,null 」です。 C# の場合、結果は「 abc, 」です。 文字列と null を結合…

Java で活性エラーが起きたときの x86 アセンブリコードを見てみました。

Effective Java の「項目66 共有された可変データへのアクセスを同期する」で、活性エラー*1について記載があります。 この現象が起こった時の x86 アセンブリコードを見てみました。 なお、アセンブリコードの出力は以下を参考にさせていただきました*2。 J…

Java7 Update6 で String クラスがさらにリファクタリングされていました

2012年8月14日に登場した Java SE 7 Update6 で、またしても String クラスがリファクタリングされていました! そこで、そこがどういう風に変わったのかを詳しく調べてみました。 フィールド変数 count と offset が削除されました Stringクラスにあった4つ…

Java6 と Java7 の挙動の違いは、バグではありませんでした。

前回の記事(「Java6 と Java7 の挙動の違い(バグ?)」)に、id:expf さんからコメントをいただきました。 おそらく、最初のprintStackTrace呼び出しではStackOverflowErrorが出ていると思います。 その後、1つ前のTest.mainがcatch→printStackTrace呼び…

Java6 と Java7 の挙動の違い(バグ?)

Java6 と Java7 で挙動が違ったところがありました。 再現コードは単純で…。 public class Test { public static void main(String[] args) { try { main(args); } catch (Error e) { e.printStackTrace(); } } } 無限再帰するだけのコードです。 最終的には…

Java SE API(JavaDoc)日本語訳は、オンラインで読めます。

各所で、Java SE API(JavaDoc)日本語訳のオンライン公開終了が話題になっています。 rip-sun.com - Togetter 新しい Java SE API リファレンスの入手先について « 寺田 佳央 – Yoshio Terada しかし、今のところ以下のURLからオンラインで読めます(2012/03/…

java.lang.Object#hashCode()の性質

この前、ふと Object クラスの JavaDoc を見ていたら、こんな記述がありました。 できるかぎり、Object クラスで定義される hashCode メソッドは、異なるオブジェクトについては異なる整数値を返します。 Oracle Technology Network for Java Developers | O…

Java7 の Frok/Join Framework を使って、しりとりをしてみました。

この前、「最も長く続くしりとり何か」という問題は再帰で解けることに気づきました。 そして、再帰なら Java7 の Fork/Join Framework です! というわけで、書いてみました! しりとりのアルゴリズム 「最も長いしりとりは何か」という問題は、再帰を使っ…

Javaの実行速度を調べるなら、ClientVM/SeverVM の違いを考慮しておくべきでした。

先日のJava7 で ArrayList の foreach が速くなった理由を調べてみました。 - 地平線に行くについて、お詫びと訂正です。 上記の記事の中で、「ArrayList の foreach文(拡張for文)がJava6 → Java7 で約2.5倍速くなっていました。」という実験結果を記載し…

Java7 で ArrayList の foreach が速くなった理由を調べてみました。

Java7でList/TreeMap/TreeSetのIteratorがかなり早くなって、 ArrayListのforeach文(拡張for文)も、普通のfor文より早くなりました。 コレクションの細かい話、だが面白い! - 谷本 心 in せろ部屋 そうなんですか!? …と思って試してみたところ、ArrayLi…

eclipseがJava7に対応しました。

eclipse3.7 SR1 で正式に Java7 への対応がアナウンスされました。 Eclipse Announces Full Support for Java 7 主な変更点は、コンパイラと主要なツール(コンテンツアシスト、クイックフィックスなど)の Project Coin への対応、とのこと。 これでやっと…

Java7 で File クラスもリファクタリングされていました

先日の記事(Java7 で String クラスがリファクタリングされていました - 地平線に行く)に続いて、File クラスを調べてみました。前回ほどの変更はありませんでしたが、それでも着実にソースがよくなっていました。 listFiles メソッド - 新文法の積極活用 …

Java7 で String クラスがリファクタリングされていました

先日、ついに JavaSE 7 がリリースされました! そこで、早速ダウンロードして、Java7 のソースコード(src.zip)を Java6と比較してみたところ、公表はされていないのですが、ちょこちょことリファクタリングされていることがわかりました。 そこで、そのうち…

Java7 の try-with-resources で複数のリソースを扱うときの書き方が、C# の using と全然違う

Java7 の try-with-resources と C# の using は、どちらも同じだと思っていました。 でも、複数のリソースを扱うときの書き方が全然違っていました。 // Java7, ひとつの try の中に複数の宣言を書く try(BufferedReader reader = Files.newBufferedReader(…

一足早く、Java7でアプリを作ってみました!

まだ公式リリース前*1ですが、一足早く Java7 でアプリを作ってみました! PopupTail Java7 で実装した、タスクトレイ常駐型の Tail です(tail -f と同じ機能です)。 ファイルに変更があると、ポップアップでお知らせします。 ログの監視などに、ぜひご利…

eclipse が Java7 に対応するのは、2011年9月ごろの予定

7月28日は Java7 のリリース日*1。 その前にちょっと遊んでみようと思ったら、eclipse がまだ対応していませんでした。 2011年9月ごろ(eclipse 3.7 SR1 で対応)になるそうです。それまでは、IntelliJ IDEAか、NetBeansを使うしかなさそうですね…。 2011年1…

Javaのクラスの半分以上は、引数なしのコンストラクタを持たない

よく使うJavaのクラスは、たいてい引数なしコンストラクタを持っています。 List<String> list = new ArrayList<String>(); Calendar calendar = new Calendar(); でも、引数なしコンストラクタを持たないクラス*1も結構あります。 InputStream inputStream = new FileInputS</string></string>…

JavaとC#の命名規約まとめ (JavaプログラマーがC#でプログラムを書いて引っかかったところ その3)

よくごっちゃになってしまうので、Java と C# の命名規約をざっとまとめてみました。 種類JavaC#(.NET) クラスPascalPascal インタフェースPascal(例:List)"I" + Pascal(例:IList) パッケージ / ネームスペースCamel(例:java.net)Pascal(例:Syste…

内部クラスはエンクロージングインスタンスが無くてもインスタンス化できるのは仕様?

id:backpaper0さんが内部クラスはエンクロージングインスタンスが無くてもインスタンス化できる?と書かれていました。 Inner.class.getConstructor(Outer.class).newInstance((Outer) null); 実行してみたところ、確かにインスタンス化できました。 でも、…