API:文字列、整数

ストリング

java.lang.String:文字列クラス、およびクラスの最終変更。
最下層はchar配列private final char value []である
ため、文字列には多くの特性があり、配列の特性です。

#1。文字列が作成されると、変更することはできません。

2.文字列のアクセス効率を向上させるために、Javaはバッファ領域に相当する文字列定数プールを提案しました。
参照型オブジェクトはヒープメモリに格納する必要がありますが、文字列は異なり、文字列定数プールに格納されます。 ;
3.プログラムの実行中に、プログラムが文字列を使用する場合、仮想マシンはこの文字列が存在するかどうかを前に定数プールで検索します。存在する
場合は、変更された文字列を直接指します。存在しない場合は、新しい文字列オブジェクトとこの文字列定数プールのアドレスを指します。文字列
は一度作成すると変更できないため、文字列を頻繁にスプライスしないでください。
効率が低いため、スペースが無駄になり、ガベージコレクションで特定の問題が発生します
。java .lang.StringBuffer java.lang.StringBuilder

1:StringBufferとStringBuilderとは何ですか?

	一个可变的字符串缓冲区

2:原則?
文字シーケンス(文字配列)を収容できるメモリ内のスペースを事前に申請してください。
予約スペースが足りない場合は、自動的に拡張されます。
最下層はchar []で、デフォルトの初期化容量は16です。文字

3:String、StringBuffer、StringBuilderの最大の違いは?

	①String不可变字符序列,而StringBuilder和StringBuffer是可变字符序列
	②StringBuffer是线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
	③StringBuilder是非线程安全,在多线程环境下可能出现问题,效率高,一般用于方法中

4:StringBuilderとStringBufferの選び方

	多线程环境下,是否有可能出现多个线程同时操作同一个数据的可能(增,删,改);

文字列任意にスプライスできない
文字列Strings2 = "a" + "b";このように書くと、コンパイル段階で+が削除され、abになります;
"a" + "b" a and bは両方ともリテラルですコンパイル段階で一時スペースを指定する必要があるため、値でタイプを決定する必要があり
ます。コンパイル中に2つの文字列が追加された場合は、+を直接省略して、ab
s1 == s2を保存します。は同じメモリアドレスであるため、trueに等しい

	String s3 = a + b;
	a和b是变量,编译阶段是不确定变量的值的
	在运行的时候,由于是两个字符串变量相加,新建了一个对象,在堆内存用来存它的值;
	自动创建一个StringBuffer对象,然后把两个变量拼接到一起,最终转换为String类型
	而是以    return new String(value, 0, count);   所以 s3是指向堆内存的

パッケージングクラス:基本的なタイプの操作をカプセル化します。これは、私たちが使用するのにより便利です。

	byte -- java.lang.Byte
	short -- java.lang.Short
					int  -- java.lang.Integer
	long -- java.lang.Long
	float -- java.lang.Float
	double  -- java.lang.Double
					char  -- java.lang.Character
	boolean -- java.lang.Boolean

基本的なタイプがあるので、なぜパッケージングクラスを使用するのですか?
利便性;理論的な完全性(オ​​ブジェクト指向)のために;


Objectはすべてのクラスの祖先であるため、任意の型を受け取ることができるメソッドを作成したいですか?Objectはすべてのクラスの祖先である
ため、任意のオブジェクトを受け取ることができます。
基本型はObjectのサブクラスではありません受け取る方法は?
ラッパークラス、基本タイプは、対応するパッケージングクラスタイプに変換できます。
パッケージングクラスは、オブジェクトのクラスおよびサブクラスでもあります。

Java1.5の新機能

自動ボックス化:基本データ型を対応するパッケージタイプに
自動的に変換します。自動ボックス化解除:パッケージタイプを基本データ型に自動的に変換します。
すべてコンパイル時に実行されます。

自動ボクシングと自動開封の深い理解

1.これはコンパイル時の概念であり、ランタイムとは関係ありません
。2。ボクシングの場合、代入操作はコンパイル時に自動的にInteger.valueOf(222)に変更されます。3。String
、Integer、Doubleなどの8つのパッケージングクラスおよびStringすべてがtoString()、equals()、hashCode()メソッドを上書きします
。4。Integer.valueOf(xxx):メソッドの実装
public static Integer valueOf(int i){ if(i> = IntegerCache.low && i <= IntegerCache。 high)return IntegerCache.cache [i +(-IntegerCache.low)]; return new Integer(i); }



5.valueOf:基本型を整数型に変換します

理解:一个大箱子,放的下就直接放进来用,有就直接拿走;
			放不下东西了就放个信息,告诉去哪里拿它;

(ボックスのサイズ)
整数定数プールが初期化され、値の範囲は-128〜127で、これ
は256個のオブジェクトを持つInteger []配列であり、オブジェクトのint値は-128、-127です。 ... 126,127添え字は0〜255
(ソースコード)
プライベート静的クラスIntegerCacheでは、整数の静的内部クラスです
。3つの変数は
static final int low = -128;
static final int high;
static final Integer cache [];
および静的この配列はコードブロックで初期化されます

	如果 值 在 -128~127之间 就直接去这个缓存数组中找对应的对象即可,不用再重新创建Integer对象
		   return IntegerCache.cache[i + (-IntegerCache.low)];  
				// IntegerCache.low 是 -128   
				// (-IntegerCache.low) : 就是 128  负负得正
				// 加上 我们要添加的数据,就能得到 对应的值所在缓存数组中的下标索引
				// 把该对象返回

	那么这样的话,如果是通过自动装箱或者是通过valueOf方法赋值的两个值都符合该范围,那么 这两个变量保存的内存地址是一致的,则使用 == 也是true
		如  Integer i1 = 123;  Integer i2 = 123;  或者 Integer i3 = Integer.valueOf(123);  他们的内存地址是相等的,找到的是同一个对象

(ボックスは十分な時間ではありません)
逆に、新しい整数(xxx)
が新しい整数(i)を返すことを意味します。新しいため、ヒープメモリは新しいオブジェクトを再作成できます。初期化int値にもかかわらず同じですが、メモリアドレスが異なる
ため、==の使用もfalseです。このとき、equalsを使用して、それらが等しいかどうかを比較する必要があります。たとえば
、Integer i4 = Integer.valueOf(128); Integer i5 = Integer.valueOf(128) ;または整数i6 = new Integer(1)

おすすめ

転載: blog.csdn.net/MIRACLE_Ying/article/details/112914005