問題タブ [scjp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - リテラル文字列の作成と文字列オブジェクトの作成
作成されるStringオブジェクトの数
私はSCJPのために勉強していますが、この文字列の問題に頭を悩ませることはできないようです。質問の見方によっては、いくつかの答えが考えられるようです。
次の初期化では、いくつの文字列オブジェクトが作成されますか?
最初は5つのオブジェクトを考えました。
しかし、それについて考えると、たとえばコンパイラ"A" + "B"
が1つのオブジェクトとして連結されるため、よくわかりません。つまり、7つのオブジェクトを作成しますか?
また、コードが次のように変更された場合に作成されるオブジェクトの数
そして最後にどうですか:
上記の例では、2つのオブジェクトのみが作成されると思います
これは正しいですか、それとも関連していませんか?つまり、定数プールから参照されるオブジェクトは、s2参照によって参照されるオブジェクトとは異なります。
ありがとう
編集
また、最終的に定数プールに入れられるオブジェクトだけでなく、破棄されるオブジェクトも含めて、作成されたオブジェクトの総数を知りたいことに注意してください。
編集
ジョンの答えを見ると、オブジェクトの作成方法を完全に誤解している可能性があります。文字列は定数プールで1回だけ作成され、再利用されることは知っていますが、「final」文字列が作成されるときに実行されるプロセスがわかりません。これが私が読んでいる本のセクションで、ここでの答えとは正反対の一時的なオブジェクトが作成されることを示唆しているようです。(または、本が間違っているか、私が本を誤解している可能性があります)
コードサンプルは
質問は
出力は何ですか?追加のクレジットとして、printlnステートメントの前に作成されたStringオブジェクトの数と参照変数の数。
そして答えは
このコードフラグメントの結果はです
spring water spring summer
。s1とs2の2つの参照変数があります。「春」、「夏」(失われた)、「春夏」、「滝」(失われた)、「春秋」(失われた)、「春夏春」(失われた)の合計8つのStringオブジェクトが作成されました。 、"winter"(失われた)、 "spring winter"(この時点で "spring"は失われます)。このプロセスで失われないのは、8つのStringオブジェクトのうち2つだけです。
ありがとう
java - Java の値渡しと不変性に関する混乱
SCJP (または現在の OCPJP) 試験の準備として、(参照) 値による受け渡しと不変性に関するいくつかの模擬問題に悩まされています。
私の理解では、変数をメソッドに渡すときは、実際のオブジェクト自体ではなく、その変数に到達する方法を表すビットのコピーを渡します。
送信するコピーは同じオブジェクトを指しているため、StringBuilder に追加するなど、そのオブジェクトが変更可能な場合は変更できます。ただし、Integer をインクリメントするなど、不変オブジェクトに対して何かを行うと、ローカル参照変数は新しいオブジェクトを指すようになり、元の参照変数はこれに気付かないままになります。
ここで私の例を考えてみましょう:
質問: このように動作するのは不変オブジェクトだけで、可変オブジェクトは値渡し参照によって変更できますか? 私の理解は正しいですか、それともこの行動には他の特典がありますか?
java - Java 汎用メソッド/パラメータ型
次のコード例では:
genericFromArrayToCollection()
コレクションの宣言された型が配列の宣言された型の親である場合にのみ、コンパイラがメソッドの呼び出しを許可するのはなぜですか(#2、#3、および #4 の行を参照)。これはなぜですか?
ありがとう
編集
#4 とマークされた行のコメントを外すと、次のエラーが表示されます
編集 2
@Tudor私はこのステートメントを使用して次の方法を試しました
コンパイラは、java.util.ArrayList に適用できないというエラーを出しました。
java - Java 配列 - 出力が '1' になるのはなぜですか?
この例の出力が1になっているのはなぜですか?
2だと思っていました。つまり、式は次のように評価されます。
a がbを指しているので、 a[0] は2であってはなりませんか?
前もって感謝します。
java - Java - 適切なコレクションの選択
重複の可能性:
Java コレクションの実装を選択するための経験則?
それぞれの長所と短所を詳述したすべての Java コレクションの「概要」リストを探しています。私は特に次のようなことに興味があります
- より高速な反復を提供する
- より高速な検索を提供するもの
- より遅い反復を提供する
- より速い挿入または取り外しを提供します
Google で検索していくつかのサイトを見たことがありますが、表形式でまとめたものを探しています。
前もって感謝します。
java - Java-重複アイテムのArrayList削除
次の例では:
ArrayListは1つ減りますが、どれを削除しますか?最後に挿入されたもの、または最初に挿入されたものを削除しますか?
java - Java Generics - このメソッド呼び出しがチェックされていない変換と見なされるのはなぜですか
次のコード例はコンパイルされますが、コンパイラの警告が表示されます
上記をコンパイルすると、次の警告が表示されます
または、 -Xlint:unchecked でコンパイルすると、次の警告が表示されます
nums の初期化を
その後、警告は表示されません。
なぜ彼らは異なった振る舞いをしているのですか?ArrayList は List のサブタイプであり、SubArrayList は ArrayList のサブタイプであるため、インスタンス化が同じであると期待していました。
ありがとう。
編集
また、メソッドを呼び出して、一般的に初期化された参照を渡すと、警告も生成されます。
ジェネリック コードと非ジェネリック コードを混在させた場合にのみ、コンパイラの警告が表示されると思いました。
java - Javaジェネリック-スーパータイプリファレンス
ジェネリックスを正しく理解している場合、として宣言されたパラメーターを持つメソッドは、Typeまたはスーパータイプの<? super T>
いずれかの参照を受け入れます。次のコードでこれをテストしようとしていますが、コンパイラーはそれを好みません。T
T
コンパイラエラーは:
<Animal>
anim2はタイプであり、Animalはスーパータイプの犬であるため、なぜ私がanim2を渡せないのかわかりません。
ありがとう
java - 初期化ブロックの注釈???? 静的かどうか
アノテーション付きメソッドから始めて、Stripes アクション Bean をコーディングしていました。
間違って私は書いた:
コンパイラは問題ありません
したがって、静的および非静的な初期化ブロックに注釈を付けることができるようです
そのような奇妙なことのユースケースのアイデアはありますか?
java - OCP 1.6 または Java SE 7 プログラマ 1
私は Java について少し知識があり、Java を勉強してオラクル認定試験を受けたいと思っています。
JAVA SE 7 プログラマー 1 と JAVA SE 7 プログラマー 2 の試験はベータ テストで利用できます。つまり、まもなく実際の試験を行うことができます。
以前は、scjp (同等のもの) を実行し、できるだけ早く scwcd を実行したいと考えていました。
しかし、今私は1.6または7を行うかどうか混乱しています.なぜなら、SE 7のSCJPと等しいものは、オラクルはJAVA SE 7プログラマー1が関連証明書と等しいと言っていますが、バージョン7でいくつかのscjp質問を追加し、JAVAを行うための前提条件であるためです. SE 7 プログラマー 2、Oracle によると、Java SE 7 プログラマー 2は SCJP の拡張バージョンです。
最新の Java EE 試験を行うために、私が選択しなければならない試験は何ですか、オラクル認定 Web コンポーネント開発者 ( JAVA SE 7 プログラマー 1 またはJava SE 7 プログラマー 2 ) の前提条件は何ですか (SCJP (古いバージョン) 以外)