Products & ServicesSecurity OperationsThreat ResearchAI ResearchNaked SecuritySophos Life The critical vulnerability in Apache’s Log4j Java-based logging utility (CVE-2021-44228) has been called the “most critical vulnerability of the last decade.” Also known as Log4Shell, the flaw has forced the developers of many software products to push out updates or mitigations to customers. And Log4j’s m
ソースレビューをしていた時にふと気づいたこと Long a = 1L; Long b = 1L; があったとして、このLong値が一致するかどうかというのを if (a == b) {}; // 1. if (a.equals(b)) {}; // 2. と比較方法が書く人によってバラバラなことに気付く。 まあ、ラッパークラスなので2.の方がいいというのはいいんだが、1.でも問題なく動いていたりするのでどうにも指摘しにくい。 というより自分自身Longの場合に上記の違いをちゃんと学んどこうと思ったのでちょっと試してみた。 まず作ったのはこんなコード public class LongTest { public static void main(String[] args) { Long a = 1L; Long b = Long.valueOf("1"); // a と b の比較 if
JavaのObjectクラスにあるメソッドequalsは、何かのインスタンス同士が「同じ」かを調べるメソッドです。 ここで言う「同じ」について、意味として同じか、実体として同じかの区別がJavaではされるのです。そして、Javaではその違いが実に重要です。その違いを意識できているかで、Javaのプログラムが正しく動くかどうかが決まってしまうほどのものなのです。 この時点で、私が何を言わんとしているのか正直よくわからない、そういうことを考えたこともなかったからちょっと不安だな…という方もご安心ください。 この記事では、そもそも同じとは何ぞやというところからスタートして、Objet.equalsの具体的な例とここは押さえておきたい!!というポイントまで、分かりやすくお伝えします。 ※この記事のサンプルは、Java 11の環境で動作確認しています 1.equalsはインスタンスの「意味」が同じか
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 例えば以下の点について、ちゃんと並行処理を考慮した実装ができていますか? シングルトン インクリメント(++)やデクリメント(--) longやdoubleへの代入 <%! %>タグで宣言された変数 もし、何の考慮もせずにこれらのコードを実装していた場合、 本番システムでとんでもないバグを引き起こす可能性があります。 本稿では以下の流れに沿って並行処理を解説したいと思います。 並行処理とは 並行処理をなぜ考慮しなければならないのか スレッドセーフな変数とそうでない変数 並行処理はテストが難しい 「並行処理」とは まずはじめにJavaがメ
“コンストラクタ”と初期化、本当に理解できてる?:【改訂版】Eclipseではじめるプログラミング(13)(1/3 ページ) これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります コンストラクタでケアレスミスを少なくしよう Javaでは、正しい状態のオブジェクトを生成するために、「コンストラクタ(construtor、組立てる者)」というものが用意されています。クラスの各フィールドの初期化処理を実行するコンストラクタを用意することにより、「プログラマが、初期化がされていないオブジェクトをケアレスミスで用意してしまう」ことを防いでいるのです。 前回の「継承やオーバーライドで簡単にクラス
マルチスレッドでintを使う そもそもJavaやAndroidでintを使う場合,複数のスレッドから演算をするときはロックを取らないといけません.これは1行の演算やインクリメント・デクリメントでも同じです. 例えばi = i + 1を演算する場合,まずiを取得して,1を足してからまたiに代入しますが,取得してから代入するまでに他のスレッドがiの値を変更している可能性があります. i++と書いた場合も同様でインクリメントしている間に値が変わっている可能性があります. アセンブラとかに詳しい人は「インクリメントなんて機械語でアトミックな処理があるじゃん」と思うかもしれませんが,i+=2の場合はロックを取らないといけないことを考えると,言語仕様として一貫性を保つためにもi++はアトミックな処理になっていないのではないか,と想像します. そもそも本当に値は変わってるのか 「とはいってもそんなの滅多
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く