글 작성자: 취업중인 피터팬
728x90
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

자바에서 제공하는 String형에 대해 이해한다.

기본형이 아닌 참조형이 String에 대해 이해한다.


 

 

 

코드
package ex07string;

public class E01StringBasic {
	
	
	
	public static void main(String[] args) {
		int num1 = 10, num2 = 20;
		String numResult = (num1 == num2) ? "데이터가 같다" : "데이터가 다르다";
		System.out.println("비교결과 : " + numResult);
		/*
		 String클래스의 객체생성방법1
		 		: new를 이용한다. new를 사용하면 동일한 문자열이라도
		 		항상 새로운 메모리를 할당하게 된다.
		 		
		 */
		String str1 = new String("Hello JAVA");
		String str2 = new String("Hello JAVA");
		
		/*
		 str1, str2는 String 객체의 참조값을 가지고 있으므로
		 아래는 단순한 참조값에 비교를 진행한다.
		 */
		
		if(str1 == str2) {
			System.out.println("str1과 str2는 참조주소 같음");
		}
		else {
			System.out.println("str1과 str2는 참조주소 다름");
		}
		
		/*
		equals()메소드
				: Object클래스로부터 상속받은 메소드로 실제 저장된
				문자열을 비교하도록 만들어진 메소드이다.
				즉 아래는 객체에 실제 저장된 문자열에 대한 비교가 이루어진다.
		 */
		if(str1.equals(str2)) {
			System.out.println("두 문자열은 동일히다");
		}
		else {
			System.out.println("두 문자열은 다르다");
		}
		
		/*
		 !!!!!!!!!!!!!!!!!!!!!!!!!중요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		 String 클래스의 객체생성방법2 : "(더블쿼테이션)을 사용한다.
		 		이 경우 내용이 동일하다면 같은 주소를 사용하게 된다.
		 !!!!!!!!!!!!!!!!!!!!!!!!!중요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		 */
		String str3 = "KOSMO";
		String str4 = "KOSMO";
		//내용에 대한 비교를 한다.(동일함)
		System.out.println("equals()메소드로 문자열 비교 :" + str3.equals(str4));
		
		/*
		 자바에서 문자열 객체를 생성할 때는 new를 사용하지 않고 "를 사용하면 동일한 
		 문자열인 경우 메모리를 하나만 사용하여 공유한다.
		 */
		if(str3 == str4) {
			System.out.println("주소가 같다");
		}
		else {
			System.out.println("주소가 다르다.");
		}
		
	}
}

 

위에 코드에서 보듯이 String 형은 클래스이다. 그래서 클래스를 생성하듯이 변수를 선언할 수 있다. 대신 new로 선언하면 String객체는 생성 할때마다 다른 주소값을 갔는다. 이게 무슨 말인지 헷갈릴 수 있다. 당연히 변수 선언하면 다른 값을 가져야지 왜 같은 값을 갔냐는 말을 할 수 있는데 실제로 더블퀘테이션으로 String을 선언하면(단 초기화 값이 같아야 한다.) 같은 주소값을 갔는데 new로 객체를 생성하면 초기화값이 같아도 다른 값을 갔는다. 아래 그림과 비슷하다.

 

 

그렇기 때문에 new로 생성한 객체는 equasl이라는 함수를 사용해 비교해야 한다. 앞으로 equals는 많이 보게 될테니 잘 봐두도록 하자

 

 

 

결과 값

 

결과 값을 본다면 더 이해가 잘 될것이다.

'Java > Java_기초부터 _끝까지' 카테고리의 다른 글

Java 기초 StringBuffer  (0) 2020.10.27
Java 기초 String함수들  (0) 2020.10.27
Java 기초 배열 - 연습문제(6)  (0) 2020.10.26
Java 기초 배열 - 연습문제(5)  (0) 2020.10.26
Java 기초 배열 - 연습문제(4)  (0) 2020.10.26