Developer

【はじめてのJava】オブジェクト参照型(文字列型)【データ型と変数編】
2020.10.10
Lv1

【はじめてのJava】オブジェクト参照型(文字列型)【データ型と変数編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


オブジェクト参照型(文字列型)

プログラムの中で「変数」を使用する際に使用した「データ型」について詳しく解説していきます。

この記事では、「文字列」を表す「String型」について扱っていきます。

目次


オブジェクト参照型とは

プログラムの中で、「変数」を扱う際などに、その変数に入るデータがどんなデータなのかを指定する必要がありました。
その際に「データ型」というものを使って、データの種類を表していました。
Javaでは、データ型には大きく分けて基本データ型(プリミティブ型)オブジェクト参照型(リファレンス型)の2種類があります。
本記事では、「オブジェクト参照型(リファレンス型)」について詳しく解説していきます。

Javaの場合、8つの基本データ型以外のデータ型は全てオブジェクト参照型に分類されます。
Javaでは1つのクラスが1つのデータ型(オブジェクト参照型)となります。。そのためオブジェクト参照型は自分で新しく作ることが可能です。

クラスを新しく作ることをクラスを定義すると言います。クラスについては詳しくは別のシリーズで扱います。

オブジェクトとは

Javaのオブジェクトとは一緒に扱うデータの集まりのようなものです。Javaではオブジェクト単位で考えるとプログラムの作成がしやすくなります。
オブジェクトについて、詳しくは別のシリーズで扱いますので今は「オブジェクト」という言葉を覚えておけば大丈夫です。

基本データ型とオブジェクト参照型の違い

基本データ型とオブジェクト参照型の大きな違いは、変数のデータの保持の方法にあります。
変数を作成するとコンピュータのメモリと呼ばれる場所の中に変数の場所が確保されます。このメモリにはいくつかの領域があります。

Javaの基本データ型の場合は、使用するメモリ上の大きさが決まっています。データ型にも依りますが最大でも8byte(64bit)です。メモリ上に変数の場所を確保した場合は、そこに直接データを保持します。

それに対し、オブジェクト参照型はどの程度のデータの集まりなのかわかりません。場合によっては大量のメモリを確保する必要があるかもしれません。そのため通常のオブジェクト参照型は、メモリ上の変数で使用する場所とは別の場所にオブジェクトを保持します。変数にはそのオブジェクトが保存されたの場所(アドレス)だけを保持します。

変数の中には「オブジェクトがある場所(参照する場所)」が入っていることから、オブジェクト参照型と言います。また、別名「参照変数」とも呼ばれます。


文字列型

文字列を扱うデータ型について詳しく解説していきます。
Javaでは、「文字」を扱うデータ型として、「char型」がありました。char型は、「1文字のデータ」しか扱えないので、文章などを変数に格納したい場合には向いていません。
そのような場合に、「文字列」を扱うデータ型として「Stringクラス(String型)」が用意されています。String型は「オブジェクト参照型」になります。

なぜ文字列がオブジェクト参照型になるかというと、何文字分の領域を確保すればよいのかわからないからです。
例えばわれわれが「Hello」と書く場合は5文字あれば足りますが、「good night」と書く場合は空白を含め10文字必要です。このように、文字列を使用する場合は文字列ごとに必要な長さが異なります。
そのためオブジェクト参照型にする必要があります。


String型

String型は、文字列を表すデータ型です。StringのSは大文字なので注意してください。(オブジェクト参照型は慣例で先頭は大文字です。)
格納できるデータ:文字列リテラル、Stringクラスのオブジェクト、nullリテラル

String型のデータは文字列を" "で囲んで利用します。" "で囲まれたデータは「文字列リテラル」と呼ばれ。String型であることを表します。
また、オブジェクト参照型の中でもString型は少し扱いが特別で、変数の定義や代入などが基本データ型と同じような書き方で使うことができるようになっています。

(例)

String s = "こんにちは";
System.out.println(s); //こんにちはと表示される

String型の便利な機能

String型は「クラス」として定義されています。
詳しい内容は別のシリーズで紹介しますが、オブジェクト参照型にはメソッドと呼ばれる、便利な機能を持たせることができます。
例えばString型には「helloの長さを調べるメソッド」「helloの3文字目を調べるメソッド」「worldの中でdは何文字目に出てくるか調べるメソッド」があり、それぞれ「lengthメソッド」「charAtメソッド」「indexOfメソッド」といいます。

メソッドを使うためにはメソッドの名前以外に追加で情報が必要になり場合があります。例えば「helloの3文字目を調べるメソッド」の場合、メソッドを使うためには「3文字目」という追加情報が必要です。
このようにメソッドを使う際に必要なデータを引数と言います。
また、メソッドを使った結果戻ってくる値のことを戻り値と言います。

Stringクラスに定義されているメソッド例

では実際に先ほど例にあった「lengthメソッド」「charAtメソッド」「indexOfメソッド」の3つのメソッドの使い方を見てみましょう。

なお、引数は青文字戻り値は赤文字で表しています。
Javaの場合は引数や戻り値のデータ型がはっきりとわかるように記載します。

  • lengthメソッド

    定義:int length()
    lengthメソッドは、呼び出すと文字列の文字数を数値(int型)で返します。このメソッドには引数は必要ありません
    (例)

    String s = "こんにちは";
    int count = s.length(); //「"こんにちは"」は5文字なので変数「count」には5が格納される。
    System.out.println(count); //「5」が表示される
  • charAtメソッド

    定義:char charAt(int i)
    charAtメソッドは、●番目という引数を渡すと、文字列の中でその位置にある文字を文字(char型)で返します。
    位置を表す数値は「0番目」から数え始めることに注意が必要です。
    (例)

    String s = "こんにちは";
    char thirdChar = s.charAt(2);  //引数の数値が「2」なので変数「thirdChar」には「'に'」が格納される。0から数え始めるので「'ん'」ではないので注意。
    System.out.println(thirdChar); //「に」が表示される
  • indexOfメソッド

    定義:int indexOf(String s)
    indexOfメソッドは、探したい文字を引数として渡すと、文字列の中で渡した文字列が最初に出てくる位置を数値(int型)で返します。
    位置を表す数値は「0番目」から数え始めることに注意が必要です。
    (例)

    String s = "こんにちは";
    int point = s.indexOf("ち");  //引数で渡された「"ち"」なのでは変数「point」には「3」が格納される。0から数え始めるので「4」ではないので注意。
    System.out.println(point); //「3」が表示される

データ型と変数編・次回の内容

今回はオブジェクト参照型の「Stringクラス」について説明しました。
Stringクラスは使用頻度が非常に高いクラスなので、しっかりと覚えましょう。
次回は、基本データ型の「型変換」についての説明を行います。


初めてのJavaシリーズの目次はこちら
データ型と変数編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら