文字列の連結

5.5 文字列の連結

 「+」という演算子は算術演算子の加算(足し算)に使われますが、文字列を結合するときに使用することもできます。文字列連結(結合)としての+演算子の使い方を確認しましょう。

5.5.1 文字列連結と数値の計算の違いを確認するプログラム

 +演算子が「文字列連結」で使われる場合と、「数値同士の計算」で使われる場合の違いを確認していきます。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch5
③ 名前 :PlusOperator
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ PlusOperator.java

package jp.co.f1.intro.ch5; 
	
public class PlusOperator {
	
   public static void main(String[] args) {
	
      int i = 3; 
      int j = 1; 
	
      //文字列連結を使用せずに表示 
      System.out.print("1 行の文字を"); 
      System.out.print(i); 
      System.out.println("行のプログラムで表示しています。"); 
	
      //文字列連結を使用して表示 
      System.out.println("実は、" + j + "行のプログラムで表示することも可能です。"); 
	
      //文字列連結と計算の順序を確認 
      System.out.println("i + j = " + i + j); 
      System.out.println("i + j = " + (i + j)); 
	    		
   }
} 

実行結果

解説

 これまでは、11~13 行目までのように、print メソッドと println メソッドを使って複数行で 1 行の文字を表示させていました。
   11: System.out.print("1 行の文字を");
   12: System.out.print(i);
   13: System.out.println("行のプログラムで表示しています。");

図 5.5.1 : 文字列連結を使わない記述


 16 行目では、文字列連結を使い 1 行で表示しています。文字列連結を使った場合のイメージは、図 5.5.2 のようになります。
    16: System.out.println("実は、" + j + "行のプログラムで表示することも可能です。");

図 5.5.2 : 文字列連結として使われている+演算子


 +演算子を使用し、左右辺のどちらかに String 型が含まれている演算では、+演算子は文字列連結として使われます。
    19: System.out.println("i + j = " + i + j);

図 5.5.3 : 複数の+演算子がある場合の優先順位は左側から先に行う。


 ”i + j = ” + i + j の答えは、「” i + j = 31″」です。この答えが出る過程を以下に説明します。

 19 行目を分解すると String 型、int 型及び int 型で構成されていて、その3つのデータ型を2つの+演算子で繋げています。2つの+演算子がある場合は、左側の+演算子の演算が先に行われるので、上記の図 5.5.3 で示すように①、②の順に演算が行われます。

 まず①の演算部分を説明します。以下の図 5.5.4 は上の①演算部分である「”i + j =” + i」を表しています。左辺に String 型があるので、+演算子は加算ではなく文字列連結として作用します。その結果は新しい String 型として「”i+j=3”」となります。

図 5.5.4 : +演算子を使った String 型と int 型の演算は文字列連結となる。


 次に②の演算部分を説明します。ここでは①の演算結果をもとに「”i + j = 3″ + j」という演算を行います。String型(文字列型)と int 型との演算を行うので、ここでも加算ではなく文字列を連結します。その結果、表示されるのは「”i + j = 31″」となります。②の演算部分のイメージを以下の図 5.5.5 に示します。

図 5.5.5 : +演算子を使った String 型と int 型の演算は文字列連結となる。


 20 行目は、括弧演算子を使って計算の順序を変更しています。
    20: System.out.println("i + j = " + (i + j));

図 5.5.6 : 括弧演算子は+演算子より優先順位が高いので、括弧内の演算を先に行う。


 ”i + j = ” + (i + j)の答えは、「” i + j = 4″」です。この答えが出る過程を以下に説明します。

 20 行目を分解すると String 型、int 型及び int 型で構成されていて、その3つのデータ型を2つの+演算子で繋げています。これは先ほど説明した 19 行目と同じです。しかし、括弧演算子が含まれているところが異なります。
 括弧演算子は+演算子より演算が先に行われるので、上記の図 5.5.6 で示すように①、②の順に演算が行われます。
 まず、①の演算部分を説明します。以下の図 5.3.7 は 20 行目の①演算部分である「(i + w)」を表しています。
 左辺と右辺ともに int 型なので、ここでの+演算子は足し算として扱われます。その結果、「4」となります。

図 5.5.7 : +演算子を使った int 型と int 型の演算は足し算となる。


 次に②の演算部分を説明します。ここでは①の演算の結果をもとに「”i + j =” + 4」という演算を行います。String 型(文字列型)と int 型との演算を行うので、ここは加算ではなく文字列を連結します。その結果、表示されるの は「”i + j = 4″」となります。

ポイント

●演算子の主な優先順位ルール
 ・ *演算子と/演算子、+演算子と-演算子より優先順位が高いため、先に評価される。
 ・ 括弧演算子+演算子、-演算子、*演算子、/演算子より先に評価される。
 ・ +演算子、-演算子 → *演算子、/演算子 → 括弧演算子 順に優先順位が高い。
 ・ 優先順位が同じ場合、左側から右側順に評価される。例えば、+演算子が2つある場合左側の+演算子が先に評価される。


●+演算子、左右辺のデータ型により、足し算を行う場合と、文字列を連結する場合がある。
 ・ +演算子の左右辺どちらかのデータ型がString型(文字列)の場合、加算でなく、文字列連結となる。
 ・ +演算子の左右辺のデータ型が数値型同士の計算、足し算になります。



NEXT>> 5.6 ーボードからの値の入力