JavaでのString、StringBuffer、StringBuilder、および数値文字列の変換

4797 ワード

本文は文章を転載するために、そして少しの例を追加しました
原文:https://blog.csdn.net/qq_33958946/article/details/82734909
原文:https://blog.csdn.net/jisuanjiguoba/article/details/82531868  
原文:https://www.cnblogs.com/dolphin0520/p/3778589.html
一:String、StringBuffer、StringBuilder間の速度性能比較
1.三者の運転速度まず三者の実行速度から見て、String
Stringが最も遅い理由:
Stringは文字列定数であり、StringBuilderとStringBufferは文字列変数です.つまり、Stringオブジェクトが作成されるとオブジェクトは変更できませんが、後者のオブジェクトは変数であり、変更できます.次のコードを例に挙げます.
String str="abc"; System.out.println(str); str=str+"de"; System.out.println(str); このコードを実行すると、まず「abc」が出力され、次に「abcde」が出力されます.strというオブジェクトが変更されたようです.実は、これは単なる仮象です.JVMはこれらの行のコードに対してこのように処理されています.まずStringオブジェクトstrを作成し、「abc」をstrに割り当てます.そして、3行目では、JVMはstrという新しいオブジェクトも作成しました.その後、元のstrの値と「de」を合わせて新しいstrに値を割り当てると、元のstrはJVMのゴミ回収メカニズム(GC)で回収されるので、strは実際には変更されていません.つまり、前述のStringオブジェクトが作成されると変更できません.したがって、JavaでStringオブジェクトを操作することは、実際には新しいオブジェクトを作成し続け、古いオブジェクトを回収するプロセスであるため、実行速度が遅い.
一方、StringBuilderとStringBufferのオブジェクトは変数であり、変数を操作することは、作成や回収の操作を行わずにそのオブジェクトを直接変更することであるため、Stringよりも高速です.また、文字列に値を割り当てる場合があります.
String str="abc"+"de"; StringBuilder stringBuilder=new StringBuilder().append("abc").append("de"); System.out.println(str); System.out.println(stringBuilder.toString()); このように出力結果も「abcde」と「abcde」であるが、Stringの速度はStringBuilderの反応速度よりずっと速い.これは、1行目の動作とString str=「abcde」であるためである.まったく同じなので、すぐにできますが、次のように書けばいいです.
String str1="abc"; String str2="de"; String str=str1+str2; するとJVMは前述のようにオブジェクトを作成・回収し続け、この操作を行うので速度が遅くなります.
2.スレッドセキュリティスレッドセキュリティでは、StringBuilderはスレッドが安全ではなく、StringBufferはスレッドが安全です.StringBufferオブジェクトが文字列バッファで複数のスレッドで使用されている場合、StringBufferではsynchronizedキーを持つ方法が多いため、スレッドが安全であることが保証されますが、StringBuilderの方法ではキーワードがないため、スレッドの安全が保証されず、エラーが発生する可能性があります.したがって、複数スレッドの操作を行う場合はStringBufferを使用しますが、単一スレッドの場合は、比較的高速なStringBuilderを使用することをお勧めします.
3.三者の使用総括String:少量の文字列操作に適用する場合;StringBuilder:単一スレッドで文字バッファで多数の操作を行う場合に適用されます.StringBuffer:マルチスレッドで文字バッファで多数の操作を行う場合に適用されます. 4.相互変換StringをStringBufferに変換する:構造方法とappend方法;StringBufferはStringに変換されます.構造方法とtoString方法です. 
二:Stringとchar、intなどの基本タイプ間の変換
文字列String自体は可変ではないので、それを操作しようとすると面倒なので、このときはStringBufferのタイプに移行したいと思います.
1、String→char:Stringは文字列であり、charは単一文字であるため、Stringをchar配列に変換するしかなく、char[]ch=str.toCharArray()である.
2、char→String:方法一:String str=String.valueOf(char); 方法2:char配列をString文字列String string str=Stringに変換することができる.valueOf(char[] ch); 方法3:String初期化時にchar配列に転送して変換することができる:String str=new String(char[]ch);
方法4:String str=‘a’+";方法5:String str=Character.toString(‘c’); StringとStringBuffer(スレッドセキュリティ)、StringBuilder(スレッド非セキュリティ)間の変換:1、String→StringBuffer:方法1:StringBufferによる構築方法:StringBuffer sb=new StringBuffer(str);方法2:append()方法:String str;        StringBuffer sb=new StringBuffer();         sb.append(str); 2、StringBuffer→String:方法一:StringBuffer sb=new StringBuffer(「abs」);         String str=new String(sb); 方法2:StringBuffer sb=new StringBuffer(「abs」);         String str=sb.toString();
StringBuilder変換状況クラス比StringBuffer
Stringとint,short,long,float,double間の変換:(基本タイプ.toString(対応するタイプ変数)と基本タイプ.parseタイプ(文字列))1、String→int:int a=Integer.parseInt(str);   String→short:short a=Short.parseShort(str);   String→long:long a=Long.parseLong(str);   String→float:float a=Float.parseFloat(str);   String→double:double a=Double.parseDouble(str);    2、int→String:String str=Integer.toString(int);   short→String:String str=Short.toString(short);   long→String:String str=Long.toString(long);   float→String:String str=Float.toString(float);   double→String:String str=Double.toString(double);
intとcharの間の変換:1、int→char:単一の数字をchar ch=(char)(48+int)に変換する.9より大きいデジタル変換(int→String→char)String str=Integer.toString(int);          char[] ch=str.toCharArray();
2、char→int:単一の数字文字をint:int a=(int)(‘5’-48);文字配列をint(char→String→int):char[]ch=new ch[]{‘1’,‘2’,‘3’}String str=Stringに変換する.valueOf(ch);          int a=Integer.parseInt(str); intとInteger間の変換:1、Integer→int:単一Integerタイプデータを変換する:Integer i=new Integer(5);        int in=i.intValue(); 2、int→Integer:        int i=6;        Integer in=new Integer(i); または:Integer in=Integer.valueOf(i);
小例:整数値を反転
方法1:整数数字を文字列Stringに変換し、StringBufferに変換し、StringBufferのreverse関数を利用する
public int ReverseNum(int a){
            String str=Integer.toString(a);
            StringBuffer s=new StringBuffer(str);
            s.reverse();
            
            return Integer.parseInt(s.toString());
      
      }

方法2:方法2:数学の方法、余剰と型取りの方法
public int ReverseNum(int n){
            int num;
            int sum=0;
            while(n>0){
                  num=n%10;
                  sum=sum*10+num;
                  n=n/10;
            }
            return sum;
      
      }