文字列の連結

5.3 文字列の連結

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

5.3.1 +演算子を使用して文字列連結と算術演算子の加算が行われるプログラム

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

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

➢ PlusOperator.java

 package jp.co.f1.superintro.ch05;
 
 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.3.1 文字列連結を使わない記述

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

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

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

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

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

 19行目を分解するとString型、int型及びint型で構成されていて、その3つのデータ型を2つの+演算子で繋げています。2つの+演算子がある場合は、左側の+演算子の演算が先に行われるので、上記の図 5.3.3で示すように①、②の順に演算が行われます。
 まず①の演算部分を説明します。以下の図5.3.4は上の①演算部分である「”i + j =” + i」を表しています。左辺にString型があるので、+演算子は加算ではなく文字列連結として作用します。その結果は新しいString型として「”i+j=3”」となります。

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

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

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

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

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

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

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

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

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

◉ポイント

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

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


NEXT>> 5.4 キーボードからの値の入力