よくあるJava面接問題–第一部:非可変性(Immutability)と対象引用(Object refer)

2841 ワード


ソース:http://www.importnew.com/2217.html 
英語の原文:  Java Success、コンパイル:ImportNew -  鄭雯さん
ImportNew注:本稿はImportNewが整理したJava面接問題シリーズの文章の一つです.このシリーズの面接問題を見てください.ここから全部のJava面接シリーズを見ることができます.
いくつかの核心的なJavaの問題はよく面接者のJavaの基本的な知識の基礎を試すために用いられます.この文章には私の本にはない面接問題がいくつか並べられています.これらの面接問題を通じて、読者もJavaの基礎知識を整理することができます.
Q 1.下のコードの断片は何を出力しますか?
1
2
3
4String s = " Hello ";s += " World ";s.trim( );System.out.println(s);A 1.正確な出力は「ハロー」です.  ワールド
文字列の前後にスペースがあるため、結果は「ハローワールド」と考えている人もいるかもしれません.では、このテーマを考察したいのは何ですか?
1. 文字列オブジェクト(String Object)は可変ではないので、このテーマは人を惑わせやすいところはs.trim()の行にあります.
2. 対象の引用と到達できないオブジェクトを理解すると、ゴミ回収器で収集されます.
このテーマに沿って、どのような概念を考察することができると思いますか?
1. 例えば、上のコードの中には全部でいくつかの文字列オブジェクトが生成されますが、いつこれらのオブジェクトがオブジェクトに到達できなくなりますか?
2. 例えば、上のコードの効率はどうですか?
一番いい説明は一つのグラフで説明します.
出力前後にスペースがない「ハローワールド」が必要なら、s.trim()を「s」に再割り当てします.この割当動作は、新たに作成された文字列オブジェクトにsを向けることができます.
上のコードも次のように書き換えられます.
1
2
3StringBuilder sb = newStringBuilder(" Hello ");sb.append(" World ");System.out.println(sb.toString().trim( ));StringBuiderはスレッドセキュリティのクラスではないので、ローカル変数として使うだけで大丈夫です.インスタンス変数として使用したい場合は、スレッドセキュリティのStringBufferクラスを選択することができます.文字列操作の裏の原理を知りたいですか?ここをクリックしてもいいです.String contension.