質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1828閲覧

配列の種類によって出力結果が異なるのは何故でしょうか?

ArchLinux

総合スコア1

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/04/27 11:17

編集2020/04/27 12:09

前提・実現したいこと

Java入門者です。基礎的な構文に関し、疑問に思うことがあります。
下記のコードにおいて、
int配列だとメモリーアドレスを出力するのに対し、char配列ならそのまま出力してもメモリーアドレスは出力されないのは何故でしょうか?
なお、for文を用いればint配列の値を取得可能なのは存じています。
何卒よろしくお願いします。

発生している問題・エラーメッセージ

実行結果:
[I@e580929
Hello

該当のソースコード

html

1public class Main { 2 public static void main(String[] args) { 3 int[] nums = {1, 2, 3, 4, 5}; 4 char[] greeting = {'H','e','l','l','o'}; 5 System.out.println(nums); 6 System.out.println(greeting); 7 } 8}

補足情報(FW/ツールのバージョンなど)

Eclipse_2020-3にて実行

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

println()は、引数がchar[]のバージョンが別に用意してあって、これだけ中身の文字を出力するようになっています(Oracle)。

投稿2020/04/27 11:22

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/04/27 11:22

char[]でもStringでもない参照型を渡した場合は、Object引数として扱われ、toString()の結果が出力されます。
退会済みユーザー

退会済みユーザー

2020/04/27 13:08

バリエーションのがうまるはすきだぞ(ぇ
ArchLinux

2020/04/27 15:08 編集

maisumakun様へ、 ドキュメントを参照させていただいたところ、 println()ではchar[]だけ中身の文字を出力すると仰いましたが StringでもそのままString、中身の文字列を出力されるそうですね。 int[]はchar[]でもStringでもない参照型になると思いますが、 println()ではメモリーアドレスが出力されるのに対し、 toString()の結果はメモリーアドレスにはならないので println()においてtoString()の結果が出力されるという回答はよく理解できませんでした。ドキュメントには"String.valueOf(x)を呼び出して出力されるオブジェクトの文字列値を取得してから"とあるので、生意気ながら、toString()とString.valueOf()を混同されていると思います。 しかしながら、 公式のドキュメントに目を通さずに質問してしまっていたので、本来の質問の主旨においてオラクル社がただそう出力する様に作ったからと 納得させていただきます。 返信ありがとうございました。
ArchLinux

2020/04/27 14:52

asahina1979様へ、 返信感謝いたしますが、 バリエーションのが埋まるは好きだぞ はどういったバリエーション が私の質問もしくはmaisumakun様の回答によって埋まるのか 文章の意図を理解することができませんでした。 失礼ながらより具体的かつ明解な回答を 頂戴させていただくことは可能でしょうか?
swordone

2020/04/27 14:58

String.valueOfは引数がnullでなければtoStringの結果返すから結局同じです。
swordone

2020/04/27 15:02

あと、「うまる」は多分アイコンのキャラクターの名前なので意味はない。
ArchLinux

2020/04/27 15:08 編集

swordone様へ、 回答ありがとうございます。 ここで質問してもいいのか疑問ですが、では、 上記のint配列をtoString()でprintln()するとメモリーアドレスを出力するのに対しString.valueOfではそのまま配列を出力するのに同じと考えるのは何故でしょうか?引き続きお願いいたします。
ArchLinux

2020/04/27 15:06

わざわざアイコンの説明までありがとうございます。
swordone

2020/04/27 16:37

> println()ではメモリーアドレスが出力されるのに対し、 > toString()の結果はメモリーアドレスにはならないので https://ideone.com/HvmXPd そもそも前提の質問が成立していないように思います。 この通り、int配列に対してはtoString()しようがString.valueOfに入れようが、あなたがメモリーアドレスと呼んでいると思しきものが出力されます。Arrays.toStringと勘違いなさっていませんか?
momon-ga

2020/04/28 09:19

オーバーロードのことをバージョンでなくバリエーションと表現する方が好きってことでしょ
ArchLinux

2020/04/28 15:02

swordone様へ、 提示されたリンクを確認させていただいたところ、 ご指摘の通り私が勘違いしていた様です。 右も左も分からない様な入門者にお付き合い 頂き有難う御座いました。 無事、不明な点を理解することができました。 本当に感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問