Javaで Stringの文字列結合について
Stringの文字列結合について、知らなかったことがあるので自分なりに説明してみます。
まず下記のプログラムの実行結果は何になるでしょう?
public static void main(String[] args) { String a1 = "aaa"; String a2 = "aaa"; // a1 == a2 は true // 同じ固定文字列なら新たにStringインスタンスを生成するのではなく // 同じインスタンスを返すようになり、参照は同一なので。 String str1 = "Hello" + "world"; String hello = "Hello"; String world = "world"; String helloWorld = hello + world; if(str1 == helloWorld) { System.out.println("str1 == helloWorldは trueです。"); }else { System.out.println("str1 == helloWorldは falseです。"); } }
str1 == helloWorldは true or false。 どちらになるでしょうか?
正解は、 str1 == helloWorldは falseになります。
プログラム中の一定の箇所は、コンパイル後下記のように置き換わる。
String str1 = "Hello" + "world"; // ↓ String str1 = "Helloworld"; String hello = "Hello"; String world = "world"; String helloWorld = hello + world; // ↓ String hello = "Hello"; String world = "world"; String helloWorld = (new StringBuilder(hello)).append(world).toString();
str1 == helloWorld がfalseということは、 str1とhelloWorldの参照先が違いますよ ってことです。
参照先が異なる理由は、StringBuilder#append().toString()の内部で「new String()」が使われているためです。
新たにインスタンスを生成されて、参照先が変わったってことですね。
参考先
Java文字列メモ(Hishidama's Java String Memo)
Java弱参照メモ(Hishidama's Java Weak reference Memo)
WeakHashMapの例外動作サンプルでの説明文。
人が求めるものは、最終的に自己満足か承認要求しかない。
タイトルどおりです。
人が求めているものは、自己満足か承認要求しかない。
ということについて書きます。
この哲学っぽい言葉は、自分が何度も考え身の回りの人に意見を話した結果辿り着いた原則です。
人が、何かを求めてる時の理由は必ず自己満足か承認要求のどちらかに当てはまる。
これを読んでる人に、ちょっと考えてもらいたいことは今まで 〜が欲しい or 〜がやりたいと思った経験の時になぜそう思ったのかということです。
仮に自分の例ですが、自分はゲームを作りたいと考えました。
ゲームを作りたい
why? 自分が思ったとおりのゲームを作れるようになりたいから。
(達成後は自分自身のみで満足する = 自己満足)
自分が作ったゲームをプレイして楽しんでもらいたい。
why? 他の人からゲームをプレイして「君のゲーム楽しかったよ」と言ってもらいたい = 自分のゲームを認めてもらいたい
自分は上記のようになりました。
これを読んでる方は、何か思い当たる経験があったでしょうか?
この原則を知って、自分は相手が求めているのは根底として自分を認めてほしいことだと考えるようになり、出来る限り相手を認めてあげるような発言を増やしました。
人と付き合う上で色々な場面や形があるけれど、根底・ベースとしての相手が求めていることは変わらないと思うので、これを知っているだけで今後の行動や接し方も少しは変われば嬉しいです。