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);
}
}