Java で文字列を連結するときは、+ 演算子ではなく StringBuffer や StringBuilder を使え、ということがよく言われてきました。
しかし、そうしなければならない理由や、しなくてもいいケース、あるいは + 演算子の方が良いケースもあることが、正しく理解されていないように思います。ベンチマークも交えて詳しく説明します。
番町のITおじさんが書く、ITエンジニアの教養ブログです。様々なプログラミング言語やソフトウェア工学についての知識、ITやIT業界の歴史、動向などを取り上げます。
2020/05/01
2020/04/18
Java 9 以降の新機能ピックアップ
最近、現役で現場で Java エンジニアやっている人の話をいくつか聞いていると、Java の機能についての理解が Java 8 までで止まっている人が多い気がしました。Oracle 版の有償化やサポートライフサイクルの変更などの影響で、Java 8 の延長サポートを使っているシステムが多く、Java 9 以降の経験を積んでいる Java エンジニアがあまり増えていないのではないかな、と思っています。
ここでは、Java 9 以降 Java 13 までに追加された機能をいくつか抜粋して紹介したいと思います。
Java 14 についてはこちらの記事をご覧ください。
ここでは、Java 9 以降 Java 13 までに追加された機能をいくつか抜粋して紹介したいと思います。
Java 14 についてはこちらの記事をご覧ください。
2020/04/17
Java 14 の新機能 (9) - JEP 368: Text Blocks (Second Preview)
JEP 368: Text Blocks (Second Preview)
Java 13 での JEP 355: Text Blocks (Preview) を受けて、仕様を修正しての Second Preview です。まだ Preview レベルなので、明示的に有効化しないと使えません。
Java 13 での JEP 355: Text Blocks (Preview) を受けて、仕様を修正しての Second Preview です。まだ Preview レベルなので、明示的に有効化しないと使えません。
テキストブロックとは?
テキストブロックとは、複数行に渡る文字列リテラルの記法です。他の言語では、here document とか here string とか raw string とか verbatim とか呼ばれている記法です。Java 14 の新機能 (7) - JEP 359: Records (Preview)
JEP 359: Records (Preview)
record とは
Java 14 から、データを保持するための immutable なクラスを定義するための新しい構文が追加されました。それが record です。
データを保持するために、以下のような性質を持つクラスを定義することは、Java では頻繁にあります。
データを保持するために、以下のような性質を持つクラスを定義することは、Java では頻繁にあります。
- immutable であること
- コンストラクタでフィールドを全て設定し、フィールドは final
- 値を取り出すメソッドを持っていること
- final クラスであること
- hashCode, equals, toString が適切に定義されていること
とても頻繁に定義するので、IDE で自動生成したり、Lombok のような特殊な仕組みを使ったりしていました。
これからは、record がサポートしてくれます。
2020/04/08
Java の final の仕様(3) - final フィールドのセマンティクスの有用性と仕組み
final フィールドのセマンティクス
final フィールドは初期化されたら変更されることはありません。そのため、final フィールドへのアクセスと、通常のフィールドへのアクセスは、その意味するところ (セマンティクス) が少し異なってきます。例えば、通常のフィールドの内容の参照は、「そのタイミングでの値」を取得するという意味を持ちますが、final フィールドの場合は内容が変わりませんから、「そのタイミングでの」という意味は抜け落ちます。Java は final フィールドのセマンティクスを活用して、メモリアクセスの最適化をしたり、同期化を減らしたり、セキュリティを担保したりしています。Java 言語仕様に沿って確認してみたいと思います。
登録:
投稿
(
Atom
)