String str = "5";
String str2 = new String("5");
다음과 같이 두 가지 방법이 존재한다.
전자와 같은 방법으로는, 5라는 값이 들어있는 변수가 없다면 새로 메모리 공간을 할당해서 만들고, 있다면 해당 변수를 주소로 참조하는 방식이다.
후자와 같이 new String()을 이용하게 되면, 강제로 메모리 공간을 무조건 할당한다.
String str1 = new String("8");
String str2 = new String("8");
if(str1 == str2) {
System.out.println("Same");
} else {
System.out.println("Different");
}
"Different" 출력.
문자열 값은 같지만, 서로 다른 객체 두 개가 만들어졌기 때문이다.
즉 == 은 주소를 참조하는 것이다.
참고로 char는 기본 자료형이지만, String은 기본 자료형이 아니다.
반면에 다음과 같이
String str1 = new String("8");
String str2 = new String("8");
if(str1.equals(str2)) {
System.out.println("Same");
} else {
System.out.println("Different");
}
.equals() 메소드를 사용하면 "Same"이 출력된다.
문자열은 .equals()를 사용하면 값의 비교가 가능하다.
Scanner sc = new Scanner(System.in);
char ch = sc.next().charAt(0);
스캐너객체.next().chatAt(0) 의 형태를 통해 char형 문자 하나를 입력 받을 수 있다.
Scanner sc = new Scanner(System.in);
String str1 = sc.next();
//스페이스바와 같이 빈 공백이 나오기 전까지를 모두 인식.
//.next(), .nextLine() 등과 같이 다양한 메소드가 있다. 더 공부를 해봐야한다.
// 문자열의 내용 자체를 비교할 때는 .equals() 메소드를 사용하고, 문자열을 가리키는 주소를 비교할 때는 == 연산자를 사용하면 된다.
Scanner sc = new Scanner(System.in);
코드를 보면, 소괄호 안에 System.in 이 들어가 있는 것을 볼 수 있다.
Scanner는 생성될 때 입력의 출처를 지정해줘야 하는데, 키보드 입력을 받을 때 사용하는 것이 System.in 이기 때문이다.
입력을 받는 Scanner 는 다음과 같은 형식으로 보통 사용한다.
Scanner sc = new Scanner(System.in);
sc.next();
next() SpaceBar(공백) 전까지의 문자열을 입력받는다.
nextLine() Enter 전까지 문장(문자열)을 입력받는다.
nextInt() 정수를 입력받는다. (Integer)
nextBoolean() true 또는 false (Boolean형) 를 입력받는다.