Javaプログラミング初心者のためのページ -40ページ目

Stringは==ではなくequalsで等価性を比較


import java.util.Scanner;

public class StringEqualsSample {

public static void main(String[] args) {
Scanner key = new Scanner(System.in);
key.useDelimiter(System.getProperty("line.separator"));
String input = key.next();

System.out.println("==で判断します");
if(input == "a"){
System.out.println("aです");
}else{
System.out.println("aではないです");
}

System.out.println();
System.out.println("equalsで判断します");
if(input.equals("a")){
System.out.println("aです");
}else{
System.out.println("aではないです");
}
}

}


キーボード入力のサンプル


import java.util.Scanner;

public class KeyInputSample {

public static void main(String[] args) {
Scanner key = new Scanner(System.in);
key.useDelimiter(System.getProperty("line.separator"));

System.out.print("何か入力してください> ");
String input = key.next();

// inputを使って何かする
System.out.println(input);
}

}

StringよりもStringBufferを使う

Stringで文字列連結・・・+演算子、を行うと、随時新しい文字列用のメモリ領域が確保されるため効率が悪い。

StringBufferオブジェクトをnewして、appendしましょう。


下記のプログラムを動かすと

String:13秒625

StringBuffer:0秒16

でした。もちろん、PCのスペックによって大幅に処理時間は変わりますが、

比較するとStringBufferの方が高速です。



// ******************* Stringを使った例

public class StringSample {

public static void main(String[] args) {
int MAX = 50000;
long start = System.currentTimeMillis();
String s = "";
for(int i=0; i<MAX; i++){
s+="■";
}

long end = System.currentTimeMillis();

long duration = end - start;
long sec = duration / 1000;
long msec = duration %1000;
System.out.println(sec + "秒" + msec);
}

}


// ******************* StringBufferを使った例

public class StringBufferSample {

public static void main(String[] args) {
int MAX = 50000;
long start = System.currentTimeMillis();
StringBuffer s = new StringBuffer();
for(int i=0; i<MAX; i++){
s.append("■");
}

long end = System.currentTimeMillis();

long duration = end - start;
long sec = duration / 1000;
long msec = duration % 1000;
System.out.println(sec + "秒" + msec);
}

}