• ベストアンサー

[C@3331394などの文字列

Stringを表示させようとして[C@3331394などという文字列("[C@"以下の数字は毎回変わります。)が意図せず出てきてしまい、困っています。これはメモリ番地とかでしょうか?どなたかこのような文字列を見かけたことのあるかた、教えてください。 ちなみにezplusのエミュにてauアプリを開発しています。 http通信をしてサーバから文字列を取ってきて、それを表示する練習用のプログラムを書いてまして、その文字列が問題の文字列になってしまいます。 エミュでも、携帯実機でも出てきてしまいます。

  • Java
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

クラスの型が違うという言い方は正確じゃないなぁ。 toString()メソッドがオーバーライドされていないと、そういう文字列になるわけです。 java.lang.Object クラスの toString() の実装は、 「クラス名 + @ + ハッシュコード」 を返すようになっています。Object の toString() をオーバーライドしないサブクラスも、もちろん同様に 「クラス名 + @ + ハッシュコード」 を返します。例えば、配列クラスです。(前の回答者の例) 逆に、toString() が『まともな』文字列を返す場合というのは、そのオブジェクトのクラスが toString() メソッドをオーバーライドしている場合です。例えば String クラスの toString() を呼び出すと文字列そのものが返されますが、それは String クラスが toString() メソッドをオーバーライドしているからですね。

supre_car
質問者

お礼

ありがとうございます。 なるほど、 確かにこちらのソースで、確かにtoString()メソッドを使用しています。 で、toString()を使用した対象オブジェクトにおいて、そのオブジェクト向けのtoString()がちゃんとオーバーライドされていないから「クラス名 + @ + ハッシュコード」が表示されてしまうんですね。 ちなみにSystem.out.println(xxx)では、実はいつもtoString()メソッドが呼び出されているんでしょうか・・。 とても参考になりました!ありがとうございました!

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

> ちなみにSystem.out.println(xxx)では、実はいつもtoString()メソッドが呼び出されているんでしょうか・・。 そうです。なので、 System.out.println(xxx); と System.out.println(xxx.toString()); は基本的に同じです。 (ただし、xxxがnullのときやプリミティブ型の場合など、一部例外があります)

supre_car
質問者

お礼

勉強になります。 クラス継承ですねえ。Javaテクノロジーの一端を垣間見れました。 ありがとうございました!

noname#227796
noname#227796
回答No.1

クラスの型が違うのではないでしょうか? 例えば、取り出したオブジェクトは配列なのに、それをStringとして表示しようとしているとか。 例えば、大本が String[] str = new String[]{"あ","い","う"}; であり、それが取ってきたオブジェクトの内に入っているとして、取り出した側で表示するときに System.out.println(str); とかやってしまうと、表題のような変な文字列になるはずです。 つまりは、クラスキャストが間違っているわけです。 引数がObjectクラスなんかだとよくやらかす間違いなので、取ってきたオブジェクトが何かをきちんと把握していないといけません。 以下のサンプルで実行すれば、同じような出力になるのがわかると思いますが。 public class strtest { public static void main(String[] args) { String[] str = new String[]{"あ","い","う"}; System.out.println(str); } }

supre_car
質問者

お礼

ありがとうございます。 参考になりました! クラスの型がちがうんですねぇ。 見直してみます。

関連するQ&A

  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • 16表記の文字列を数字に直したい(C/C++標準関数)

    16表記の文字列を数字に直したい(C/C++標準関数) 例えば、"FF”な255 or -127という風に16表記の文字列を数字に直すC/C++の標準関数はありますか? なければ、どのようなやり方で行っていますか? VxWorksのprogramを開発しようとしているのですが、どんな標準関数が使えるのか、 直接契約していないので分かりません。 組み込み製品の説明書にはC/C++の仕様の説明書がないですね。 VxWorksでsupport されている標準関数はどんなものがあるかもご存知の方教えてください。 シリアル通信のプログラムで伝聞がASCIIで書かれていて、数値は10進だったり、16進だったりします。

  • C(char *s1)の文字列をObjective-Cの文字列(NSS

    C(char *s1)の文字列をObjective-Cの文字列(NSString *s2)にするにはどうしたらよいのでしょうか? char s1[] = "abc"; NSString *s2 = [[NSString alloc] initWithUTF8String:s1];  // (A) NSLog(@"s2=[%s]", s2); 結果がabcかなと思っていましたが、読めない変な文字が表示されました。 (A)を NSString *s2 = [NSString stringWithFormat:@"%s", s1]; に変えても同じでした。 s1のC文字列は日本語を含まないアルファベットの文字列なのになぜ?と 困っています。 Objective-Cの初心者で申し訳ありません。

  • 文字列での「”」の使い方

    開発初心者です。 文字列での「”」の使い方が分かりません。 string start_point2_1 = "<font size="-1">"; 以上のようなコーディングをすると 「;が必要です。」とエラーメッセージが表示されます。 ""を消さずにコンパイルする方法をご存知の方がいらっしゃれば 御教授宜しくお願いします。

  • 文字列の置換をCStringで(C++)

    あいうえお(5)かきく(8)けこ という文字列の ”(数字)”を別の文字列”さささささ” に変えたいんです。 (つまり、正解は あいうえおさささささかきくさささささけこ) replace関数を使ってみようと思ったのですが、 string型のものならば、 (開始場所、変えたい文字数、変えたい文字列) を引数にすればいいのはわかるのですが、 これを、CStringでやりたいのです。 ヘルプを見てもCStringのreplace関数は (変更前の文字列、変更後の文字列)を引数にする、 となっていて、私のように(数字)というアバウトな場合にはむかないのかとも思いますが、他のプログラムとの関係で、CString型がいいのです。 ややこしくてすいませんが、アドバイスお願いいたします。

  • 文字列の加算

    OS  :WindowsXP Pro SP1 開発環境:VisualStudio .NET 2003 開発言語:C# 開発形態:Windowsアプリケーション プログラミング初心者です。どうかよろしくお願い致します。 現在、あるアプリケーションを作成しております。 その中で、数値の入った文字列を受け取り、それを全て加算しようとしております。 例えば、 引数の文字列が"123456789"だとしたら、そのメソッド内で1+2+3+4+5+6+7+8+9を計算し、答えを返却値とする。 私は文字列をint型にキャストして計算しようと思ったのですが、うまくキャストできません。string型はint型にキャストできないのでしょうか? また他に文字列の数値の加算をする方法がありましたら、どなたかご教授お願い致します。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • C#における文字「”」の使い方

    開発初心者です。 文字列での「”」の使い方が分かりません。 string start_point2_1 = "<font size="-1">"; 以上のようなコーディングをすると 「;が必要です。」とエラーメッセージが表示されます。 ""を消さずにコンパイルする方法をご存知の方がいらっしゃれば 御教授宜しくお願いします。

  • C#でのワイルドカードを使った文字検索

    開発初心者です。 文字検索をワイルドカードを使って行いたいと考えています。 例えば、 string x = "ABCDEFGHI" という文字列があったとして 「C***G」という文字列(***はワイルドカード)を検索したいとき、 x.IndexOf(C***G)=2のような結果を出力できるような検索方法を探しています。 ご存知の方がいれば、ご教授宜しくお願いします。

  • ユニークな文字列を順次, 生成する関数

    C++において, 適当な文字列を元に, ユニークな文字列を順次, 生成する関数を作りたいと思っています. (LISPで云う, 関数gensym()と似た役割を持つ関数です.) 例えば, "hoge"というstringを元に, "hoge0", "hoge1", "hoge4", "hoge8", "hoge100", ...., といったように, stringが互いに重複しないように, 適当な数字を連結した文字列を順次生成したいのです. 以下のように, 私なりの方法を考えてみたのですが, これだと, 今まで生成したstringを保存するhoge_setが必要になります. 何かより良い(シンプル, 効率的な)方法がありましたら, 教えていただけますでしょうか? よろしくお願い致します. (乱数を用いた方法) 1. 元となるstring型の変数nameを, "hoge" で初期化. 既に作成したstring文字列を保存する, set < string > hoge_setを宣言. 2. 乱数を生成し, それをnameにappendしたものを, string型の変数name2に代入. 3. 同じ文字列が存在したら, 2. に戻る. 同じ文字列が存在しなかったら, hoge_setに追加する.

専門家に質問してみよう