文字列の連結
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 行の文字を表示させていました。
図 5.5.1 : 文字列連結を使わない記述
16 行目では、文字列連結を使い 1 行で表示しています。文字列連結を使った場合のイメージは、図 5.5.2 のようになります。
図 5.5.2 : 文字列連結として使われている+演算子
+演算子を使用し、左右辺のどちらかに String 型が含まれている演算では、+演算子は文字列連結として使われます。
図 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 行目は、括弧演算子を使って計算の順序を変更しています。
図 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型(文字列)の場合、加算でなく、文字列連結となる。
・ +演算子の左右辺のデータ型が数値型同士の計算、足し算になります。