• ベストアンサー

Javaは全く扱ったことがないのですが、Javaのコードを読んでいて意

Javaは全く扱ったことがないのですが、Javaのコードを読んでいて意味の理解できないところがあったので質問させてください。 次のような宣言を行った場合、配列Xの内容はどうなるのでしょうか? 4つめの0x78だけはbyte型への型変換が行われていないようなのですが・・・。 final byte[] X = { (byte)0x12, (byte)0x34, (byte)0x56, 0x78}; よろしくおねがいします。

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

  • ベストアンサー
  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.1

すべての要素はbyte型になります。 byteの配列で宣言してるので、byte型の値(-128から127)しかはいりません。 つまり、最初の3つもキャストしなくてもおなじです。 もし、初期化時に200などのbyteの範囲外の値の場合はコンパイルエラーになります。

shango
質問者

お礼

だとしたら単なる書き忘れかも知れませんね。 ご回答ありがとう御座いました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Java intの扱い

    こんにちは、Javaを勉強しているものです。 小さなデータ(byteなど)をより大きないれもの(intなど)に入れるときには、暗黙的なキャストがおこなわれます。 逆に、大きな値を小さないれものに入れるための変換を「縮小変換」と呼び、これには明示的なキャストが必要だと習いました。 そこで、次のようなコードがあった場合、これは明示的なキャストが必要なのではないのでしょうか? byte b = 3; これは、コンパイルエラーにはならないのですが、 3はint型であり、bはbyte型なので、大きな値を小さな小さないれものに入れているということになります。本来であれば byte b = (byte)3; と書くべきではないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • FORTRANからJava

    FORTRAN初心者で理解できずに困っています。。 FORTRANで書かれたプログラムをJavaに変換したいのですが、自分なりにしてみたらエラーエラーエラーでした。 配列が一番間違ってるみたいに思えます。 たとえば、 REAL X(50,50) AX=X(1,MM)-X(1,1) はJavaではどのように書くのですが?? また、参考になりそうなサイトなどあれば教えてください。 どうか、よろしくお願いいたします。

  • JAVA 文字コード変換

    こんにちは。 JAVAの文字コード変換のところで教えて頂きたい所があります。 はしご高(髙)  の文字をUTF-8からJISコードに変換してテキストファイルに書き込んでいるのですが、文字化けして"?"という文字になっています。 "髙"の文字をUTF-8からJISコードに変換の仕方のコーディング方法を教えて頂けないでしょうか。 現在下記の様に変換を行って書き込んでいます。  String str = "髙";  byte[] buf = str.substring(0, 1).getBytes("JIS0208"); OS:WindowsXP DB:Oracle10g  宜しくお願い致しますm(__)m

    • ベストアンサー
    • Java
  • JAVAで型を宣言するときの質問です

    JAVAで型を宣言するとき CarFactory factory = new BusFactory(); のように 宣言の型はCarFactoryで、newで実際に代入するのは BusFactory()というのは どういう意味なのでしょうか? 式の左側と右側で違うクラスを書く場合は どのような点に気をつけなければならないでしょうか? ちなみにこちらのサイトにあったコードです ttp://www.syboos.jp/sysdesign/doc/20080609224443186.html

    • ベストアンサー
    • Java
  • int型の内容をbyteの配列にコピー

    int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。

    • ベストアンサー
    • Java
  • Javaでの文字化けの検出

    Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。

  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • Javaの細かい仕様を教えていただけませんか?

    ずっと前にちょろっと触ってJavaは一端離れていましたが 仕様を細かく確認してみたくなったので、駆け足で先ほどまた触れてみました。 なお、それぞれ触れた時間はだいぶ違いますが、プログラミング言語に関してはC、C++、C++/CLI、C#、HLSL、PHPは経験があります。(アセンブリはほんの少しだけ読める程度) なのでそれら(とくにC++)との比較を教えていただけると早く理解が出来そうで また、かなり多くの質問があります(だいたいは基本的なことでしょう)が、全部でなくとも、一部でもいいので教えていただけると助かります。 ためしに以下のようなコードを書いてみました。 class MySamplePrint { private static interface PrintIF { void Print(); //(1) } private static final class MyClass1<T> implements PrintIF { private final class Nest1{ private int num = 0;} private final Nest1 n = new Nest1(); //(2)、(3) private final T data; MyClass1( T data_, int num_ ){ //(4) data = data_; n.num = num_; } MyClass1( final T data_ ){ data = data_; } //(5) //MyClass1(){ this((T)0); } //(6)、(7) //(8) public void Print(){ System.out.println(data); System.out.println(n.num); } } public static void main(String[] arg){ PrintIF a = new MyClass1<Integer>(123); //(9) a.Print(); final MyClass1 b = new MyClass1("abc"); //(10) a = b; a.Print(); a = new MyClass1<String>("def",234); a.Print(); int i = 0; { //int i; //(11) int x = 0; } int x = 1; //(12) final PrintIF c = new MyClass1<String>("def",234); c.Print(); } } 結果 123 0 abc 0 def 234 def 234 (1) C++ でいうconstメンバ関数はJavaにもないですか?(可能であればvoid Print() const;のようなものを書きたい) (2)コンストラクタと、このようにメンバの宣言場所でついでに 「型 変数 = 何々;」については、どっちが先かとか明確な順番は規格上定義されているのでしょうか? (3)メンバ変数にも、このようにfinalを付け、コンストラクタ(か 「型 変数 = 何々;」)で一度だけ値を代入する、といったことが、試したら出来ましたが、これは仕様上普通に可能って事になっていますか? (4)C++でいう、int num_ = 0など、書かなかった場合それになる、というデフォルト引数というものは、Javaにもないんでしょうか?(つまり、呼び出し側で同じような書き方をしたければこのようにオーバーロードを使う?) (5)ローカル変数同様、引数にも普通にfinalを指定可能…? (6)C#ではC++の初期化子リストっぽく MyClass1() : this(何々){ } とか言う書き方になるかと思いますが、Javaでは専ら{}内にのみ記述(this(何々)だったら一行目)でしょうか? (7)この行はコメントアウトすると 「int から T へキャストすることはできません」 とエラーになります。 んでも(T)""にすると一応通ります。 String型などと整数の0(nullを意図してほしい)は互換性がないのでしょうか (8)C++やC#のoverrideのようにオーバーライドを明示的に示す方法(や、C#のnewに匹敵するものとか)はありませんか? (9)<int>はできませんでした。ジェネリックスに指定できる型にはどういう制限があるのでしょうか? (10)警告は出ましたが、<String>を省略しても通ってしまいました。これは興味本位で、実際は警告も出るので指定はすると思いますが、これは仕様ですか? (11)この場合、xは可ですがiはダメでした。つまり、CやC++と違い、スコープがより狭い範囲に変わっても「それまでに、より広いスコープで宣言されていた名前」とかぶる変数名の変数は宣言できない、ということでしょうか? (12)C++的には、このcは参照(というよりポインタに近い)と考えて、この場合finalはc自体の変更を阻止していますが、参照先の内容は変更可能に思います。 CやC++的には const PrintIF* c = ~ ではなく PrintIF* const c = ~ と同じ意味 出来れば const PrintIF* c = ~ や const PrintIF* const c = ~ といったことも可能だといいのですが、Javaでは仕様上、それは無理、でしょうか? その他、コード以外で (13)アクセス修飾子の指定を書かないと、Javaでは同一パッケージ内で参照可能、ということですが、この「パッケージ内」というのは、これはC#でいうinternalのような意味あいになる、ということでしょうか? (14)Javaでは非staticなメソッドは全て、C++でいうvirtualに自動的になる、ということでしょうか?(逆に言うと明示的な、virtualに相当する修飾子がない?) (15)Eclipseで タブが> 改行が曲がった矢印 で、全部の行に表示されるのですが テキストの色や背景色(白)の変更や、これらを非表示にする といったことは可能ですか?

    • ベストアンサー
    • Java
  • BYTEについて―

    BYTEについて― わからない事がいろいろと有るのですが、 【1.データの受渡しについて。】 LPBYTE型に入っている32bitのBMP画像(pixel)を BYTE*型(pbyte)に代入する場合 pbyte = (BYTE*)pixel; このコードで問題ないのでしょうか? また、用意した受け皿のサイズを超えたデータを入れた場合、 配列の末尾に\0が入って残りは切り捨てられているのでしょうか? そして、これは正常に動作するやり方なのでしょうか? 【2.LPとは?】 LPBYTEはBYTEのポインタ型と聞きますが、 BYTE*とどう用法が違うのでしょうか?(LPシリーズ全般の疑問ですが) また、LPBYTEもやはり、末尾に\0が入って管理されているのでしょうか? 【3.宣言・定義・使い方について。】 現在、 BYTE* pbyte = new BYTE[10240]; 等と書いてBYTE配列を作っているのですが、 これは宣言と同時に定義している事になるのでしょうか? そして、newしている以上、手動でdeleteしなければならないのですよね? また、これ以外の定義方法も有るのでしょうか? 質問が多岐に渡っていてすいません、 どうも普通の配列と混同しているのか、 頭の中で疑問がグルグル回ってしまっていまして; よろしくお願いします。 っ;_ _)っ

  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java