1. 문자열
문자열은 자바에서 기본적으로 제공하는 클래스인 String 타입을 사용한다.
String s1 = "안녕 java";
-> s1은 내부적으로 new String("안녕 java")를 호출해 생성한 객체이다.
-> "안녕 java"를 문자열 리터럴이라고 한다.
String s2 = "안녕 java";
가 추가된다면 내용이 같으므로 s2라는 객체를 새롭게 생성하는 것이 아니라 기존의 문자열 리터럴을 공유한다.
즉 s1과 s2는 동일한 객체를 가리킨다!
2. 문자열의 비교
일반적으로 비교연산에 사용하는 "==" 와 "!="는 문자열을 비교할때 다른 의미로 사용한다.
문자열이 동일한지 비교하는 것이 아니라 동일한 객체인지 검사하는 것이다.
public class String1Demo {
public static void main(String[] args) {
String s1 = "Hi, java";
String s2 = "Hi, java"; // s1과 s2는 같은 객체를 가리킨다.
String s3 = new String("Hi,java");
System.out.println("s1과 s2가 같은가? " + (s1==s2));
System.out.println("s1과 s3가 같은가? " + (s1==s3));
s1 = s3; // s3가 가리키는 것을 s1도 가리키도록 한다.
System.out.println("s1과 s3가 같은가? " + (s1==s3));
System.out.println("s1과 s2가 같은가? " + (s1==s2));
}
}
String s1,s2는 같은 문자열 리터럴이므로 같은 객체를 가리킨다.
s3도 같은 문자열리터럴 이지만 new를 사용해서 새롭게 문자열 객체를 생성했으므로
s1,s2와는 다른 객체이다.
즉 s1과 s2를 비교하면 같은 문자열을 바라보고 있고
s1과 s3를 비교하면 다른 문자열을 바라본다.
이때 s1 = s3;를 하면 new를 이용해 만든 객체를 가리고 있던것을 s1도 가리키도록 만든다.
즉 이후에는 s1과 s3는 같은 곳을 바라본다.
그렇다면 s1과 s2는 다른 곳을 바라보게된다.
결과는 이와 같다.
2. 문자열의 비교 - compareTo, equals
이외에도 문자열을 비교하도록 String 클래스에서 제공하는 메서드들이 많다!
그중 compareTo, equals를 보면
int compareTo(String s) // 반환형이 <int>, 같으면 0, 다르면 문열의 빼기연산
boolean equals(String s) // 반환형이 <boolean>, 같으면 true, 다르면 false 반환한다.
public class String1Demo {
public static void main(String[] args) {
String s1 = "Hi, java";
String s2 = "Hi, java"; // s1과 s2는 같은 객체를 가리킨다.
String s3 = "Hi, Code";
System.out.println("s1과 s2가 같은가? " + s1.equals(s2));
System.out.println("s1과 s2가 같은가? " + s1.compareTo(s2));
System.out.println("s1과 s3가 같은가? " + s1.compareTo(s3));
}
}
s1과 s2가 같으므로 bool형을 반환하는 equals는 true를 출력한다.
s1과 s2가 같으므로 int 형을 반환하는 compareTo는 0을 출력한다.
compareTo는 다를경우 달라지는 첫 자리의 아스키코드를 이용해 계산한다.
s3와 s1이 달라지는 첫 자리는 'C'와 'j'이다.
아스키 코드로
C는 67, j는 106이기에 106 - 67 = 39이다.
s1.compareTo(s3) 의 경우 s1의 첫자리의 아스키 - s3의 첫자리의 아스키 이다.
이런 함수 이외에도 특정 문자열이 포함하는지 , 특정 문자열로 끝나는지 알아내는 메서드,
문자열의 길이를 반환하는 메서드, 문자열을 소문자 or 대문자로 변환하는 메서드 등 여러 메서드가 존재한다.
'프로그래밍 > JAVA' 카테고리의 다른 글
Java - 동적배열[ArrayList](8) (0) | 2021.08.27 |
---|---|
JAVA - 배열의 선언과 생성(7) + String (0) | 2021.08.26 |
자바 - 정적멤버[static](5) (0) | 2021.08.21 |
자바 - this, this메서드(4) (0) | 2021.08.21 |
자바 - [객체지향프로그래밍]-생성자와 생성자 오버로딩(3) (0) | 2021.07.28 |