JavaのString型で「new String(”hoge”)」を使う例。

文字列な定数クラスでjava.lang.String.String(java.lang.String)が初めて必要になったよ。

以下、「"hoge"」と「new String("hoge")」の動作例ですよ。

Constant.java。定数クラス。

//Constant.java
package aaaa;

public class Constant {

  /* いつもの */
  static final String NORMAL = "normal";

  /* 明示的に別の実態を作成 */
  static final String ABNORMAL = new String("normal");

}

Main.java。定数を標準出力に出力するだけ。

//Main.java
package aaaa;

public class Main {

  public static void main(String[] args) {

    /* いつもの */
    System.out.println("NORMAL = " + Constant.NORMAL);

    /* 明示的に別の実態を作成 */
    System.out.println("ABNORMAL = " + Constant.ABNORMAL);
  }
}

コンパイル→実行。

C:?temp>javac aaaa/Main.java

C:?temp>javac aaaa/Constant.java

C:?temp>java aaaa/Main
NORMAL = normal
ABNORMAL = normal

ここまでは問題ないよね。

ここで、Constant.javaを書き換える。("normal"→"abnormal")

//Constant.java
package aaaa;

public class Constant {

  /* いつもの */
  static final String NORMAL = "abnormal";

  /* 明示的に別の実態を作成 */
  static final String ABNORMAL = new String("abnormal");

}

Constant.javaをコンパイル→実行すると…

C:?temp>javac aaaa/Constant.java

C:?temp>java aaaa/Main
NORMAL = normal
ABNORMAL = abnormal

…「いつもの」が変更されてない!!

このときMain.javaをjadでデコンパイルすると…

// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) ansi
// Source File Name:   Main.java

package aaaa;

import java.io.PrintStream;

// Referenced classes of package aaaa:
// Constant

  public class Main
  {

  public Main()
  {
  }

  public static void main(String args[])
  {
    System.out.println("NORMAL = normal");
    System.out.println("ABNORMAL = " + Constant.ABNORMAL);
  }
}

…なるほど。「いつもの」の書き方だと、コンパイル時点でクラスファイルに定数が埋め込まれるのでした。

Main.javaもコンパイル→実行すると…

C:?temp>javac aaaa/Main.java

C:?temp>java aaaa/Main
NORMAL = abnormal
ABNORMAL = abnormal

…これが期待する動作でした。

このときMain.javaをjadでデコンパイルすると…

// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) ansi
// Source File Name:   Main.java

package aaaa;

import java.io.PrintStream;

// Referenced classes of package aaaa:
// Constant

public class Main
{

  public Main()
  {
  }

  public static void main(String args[])
  {
    System.out.println("NORMAL = abnormal");
    System.out.println("ABNORMAL = " + Constant.ABNORMAL);
  }
}
結論
定数クラスの定数を変更するとき、「"hoge"」だと定数クラスを使用しているクラスも再コンパイルが必要だ
定数クラスの定数を変更するとき、「new String("hoge")」だと定数クラスを再コンパイルするだけで良いよ
補足
既に「"hoge"」となっている場合、そこを「new String("hoge")」に変更するだけではダメですよ(定数クラスを使用しているクラスも再コンパイルが必要)

…以上。

っていうか、

  • EclipseならConstant.javaを書き換えて実行すると、自動でMain.javaもコンパイルしてくれる

から、こんなことは普段意識する必要なし。これを意識する必要があるのは…ノーコメント。

カテゴリー: 俺様のこと | タグ: | JavaのString型で「new String(”hoge”)」を使う例。 はコメントを受け付けていません

みんなの狛江夏まつりに向けて。

今週は根川地区センターで練習。会場に着いたら自転車が沢山あったのでビビったが、他の団体の自転車でした。

それでも参加率高い!これは凄いよ。本当に凄いと思う。なんでー?

あと、ホルンとクラリネットに見学者の方がいらしていた。うぇるかむ!

で、なんでも巷の噂によると狛江夏まつりに狛吹が参加するらしく、狛江夏祭り実行委員会の方々が見学にいらしていた。どこかでお会いしたことがある方々だったが、多分気のせいだろう。いや、気のせいじゃないな、やっぱり。顔見知りでした。お疲れ様です。

夏祭り向けの曲として練習したのは、「ブラジル」と「コパカバーナ」だった。ラテン系だ。因に「コパカバーナ」は初見のはず。まさに初見ラッシュ…。演奏はちょっとノリが悪かったかもだが、まぁ夏祭りまでにはきっと良くなっているはずだ。

そんな感じで夏祭り実行委員会の方々は帰宅されていった。お疲れ様です。

後半は夏祭りのことはすっぱり忘れ、「イーストコーストの風景」の「ニューヨーク」をやった。やっぱ難しいよね、これ。最後に通したんだが、予想通りところどころグダグダだよね。。指揮者の先生が来る前になんとかなりたいものですね。

練習後は呑み。つーか呑み過ぎ。呑まれ過ぎ。はしゃいでごめんなさい。

タグ: , | みんなの狛江夏まつりに向けて。 はコメントを受け付けていません

サボりじゃないよ。

仕事だよ。

決して「タンホイザー序曲の2ndだけのために行くのはメンドイ」じゃないよ。

タグ: , | サボりじゃないよ。 はコメントを受け付けていません

報告。

定期券を買う夢をみました。

今日も良い天気でした。

カテゴリー: 俺様のこと | 報告。 はコメントを受け付けていません

お疲れちゃーん。

本日は西河原公民館にて練習でございやした。

曲目は、「イーストコーストの風景」の「シェルター・アイランド」「ニューヨーク」(「 キャッツキルズ」はやらなかった)と、「ターンブル・マーチ」と「ブラジル」でございやした。「ブラジル」は初見でございやした。

「イーストコースト」は説明メインであまりやりやせんでした。「ターンブルマーチ」はさらっと進んでいきやした。「ブラジル」は男衆の良い声が響き渡りやした。

「ブラジル」は吹奏楽では割りとメジャーな方だと思っておりやしたが、あっしは初見でございやした。もとい、ほとんどの皆さんが初見でございやした。何度もやってやり飽きているお方もいらっしゃっり、とても驚いてなすったご様子でございやした。

練習後は、定期演奏会の打合せ→飲酒→爆睡でございやした。お疲れちゃーん。

タグ: , | お疲れちゃーん。 はコメントを受け付けていません