프로그래밍/JAVA

java - 문자열[==,!=,compareTo, equals](6)

개발자 덕구🐾 2021. 8. 23. 14:52
728x90

 

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 대문자로 변환하는 메서드 등 여러 메서드가 존재한다.

 

 

반응형