JAVAの文字列と、共通のインタビューの質問をご紹介

文字列の深い理解


1)文字列の文字列定数:あなたがオブジェクトを作成するとStringオブジェクトを変更することはできません。(以下ソース)

ここに画像を挿入説明

        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);

業績

true
false
  • ==基本データ型の比較比較は、時間基準のタイプを比較し、値のアドレス値の比較です。ここでは比較のタイプへの参照です。
  • ないかどうかを確認するために、「ABC」、初めての定数プールを作成し、使用すると、1つ、任意の直接的な使用を作成します。したがって、STR1及びSTR2、点格納された同じアドレス値が同じです。
  • 新しいオブジェクトのうちSTR3は、新しいスタック、および定数プールSTR1のうち、アドレスの値が等しいことはできませんので、それは偽です。

文字列str =新しい文字列(「ABC」):2)でどのように多くのオブジェクトを作成しましたか?

 String str=new String("abc");

A:私は定数プールにヒープ内の2つのオブジェクトを作成します

  • 作成後、「ABC」、ヒープ内の一定のプールを作成する時には、新たな、そしてコンスタントプール「ABC」の過去のコピーの実装。次にS1への参照を割り当てます。

3)サプリメントケース

        String s1 = "a" + "b" + "c";// 在编译时就变成 abc 常量池中创建abc
		String s2 = "abc";
		System.out.println(s1 == s2);// true java中有常量优化机制
		System.out.println(s1.equals(s2));// true

コンパイル時に定数プールはabcの両方の定数プールで、ABCを作成となり

        String s1 = "ab";
		String s2 = "abc";
		String s3 = s1 + "c";
		System.out.println(s3 == s2);// false
		System.out.println(s3.equals(s2));// true
		

これは、定数プール内のアドレスを対応する新しいS3のうち、スタック内の対応するアドレス、S2と同等であるため、


自分自身と人々を感動しようとしている少しの時間の何かをしようと少しより多くの時間を費やしています。

2020年2月25日

公開された13元の記事 ウォン称賛11 ビュー6018

おすすめ

転載: blog.csdn.net/weixin_45393094/article/details/104506187
おすすめ