Midnight Coder's Lounge

[Java] String ๋ณ€์ˆ˜๋ฅผ == ๋กœ ๋น„๊ตํ•  ๋•Œ : ๋˜‘๊ฐ™์€ ๊ฐ’์ธ๋ฐ, ์™œ false๊ฐ€ ๋‚˜์˜ค์ฃ ? ๋ณธ๋ฌธ

Language

[Java] String ๋ณ€์ˆ˜๋ฅผ == ๋กœ ๋น„๊ตํ•  ๋•Œ : ๋˜‘๊ฐ™์€ ๊ฐ’์ธ๋ฐ, ์™œ false๊ฐ€ ๋‚˜์˜ค์ฃ ?

AtomicLiquors 2022. 8. 13. 22:57

 ์š”์•ฝ 

๐Ÿ™‹‍โ™‚๏ธ Q : 

์„œ๋กœ ๋‹ค๋ฅธ ๋‘ String ๋ณ€์ˆ˜๋ฅผ == ๋กœ ๋น„๊ตํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋˜‘๊ฐ™์€ ๊ฐ’์ธ๋ฐ ์™œ false๊ฐ€ ๋‚˜์˜ค์ฃ ?

 

๐Ÿ‘จ‍๐Ÿ’ป A :

String๋ผ๋ฆฌ ๊ฐ’์„ ๋น„๊ตํ•  ๋• '=='๋ฅผ ์“ฐ์ง€ ๋ง๊ณ  '.equals()'๋ฅผ ์“ฐ์„ธ์š”.

 


 ์ƒ์„ธ 

 

String ๋ณ€์ˆ˜ str1์„ ์„ ์–ธํ•˜๊ณ , "hello"๋ผ๋Š” ๊ฐ’์„ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜๋‹ค๋ฅธ String ๋ณ€์ˆ˜ str2๋ฅผ ์„ ์–ธํ•˜๊ณ ,  Scanner๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ๋ฐ›์€ str2์˜ ๊ฐ’์ด str1๊ณผ ์ผ์น˜ํ•˜๋ฉด  "์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๊ฒŒ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ: 

//str1๊ณผ str2 ์„ ์–ธ
String str1 = "hello";
		
Scanner sc = new Scanner(System.in);
String str2 = sc.next();


//str1๊ณผ str2๋ฅผ ๋น„๊ตํ•˜๊ณ  ์กฐ๊ฑด๋ฌธ ์‹คํ–‰
if(str1==str2) {
	System.out.println("์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!");
}else {
	System.out.println("์ž…๋ ฅ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

//str1==str2๊ฐ€ true/false๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธ
System.out.println(str1==str2);

 

๊ทธ๋ฆฌ๊ณ  ์ฝ˜์†”์— ๋˜‘๊ฐ™์ด "hello"๋ผ๊ณ  ์ž…๋ ฅํ–ˆ๋Š”๋ฐ,

๊ณ„์† "์ž…๋ ฅ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋งŒ ๋œน๋‹ˆ๋‹ค.

str1 == str2๋ฅผ ์ง์ ‘ ์ถœ๋ ฅํ•ด ๋ดค๋”๋‹ˆ ๊ฒฐ๊ณผ๊ฐ€ false๊ฐ€ ๋‚˜์˜ค๋„ค์š”.

 

์ฝ˜์†” :

hello
์ž…๋ ฅ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
false

 

๋ถ„๋ช…ํžˆ str1๊ณผ str2์˜ ๊ฐ’์ด ๊ฐ™์€๋ฐ, true๊ฐ€ ๋‚˜์™€์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

์™œ ์ด๋ ‡๊ฒŒ ๋˜๋Š” ๊ฑธ๊นŒ์š”?

 

 

 

๐Ÿ“ '.equals()'๋ฅผ ์ด์šฉํ•ด String์˜ ๊ฐ’ ๋น„๊ตํ•˜๊ธฐ

์„œ๋กœ ๋‹ค๋ฅธ ๋‘ String ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, '=='๋ฅผ ์“ฐ์ง€ ๋ง๊ณ  '.equals()'๋ฅผ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

'.equals()'๋ฅผ ์“ฐ๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ:

String str1 = "hello";
		
Scanner sc = new Scanner(System.in);
String str2 = sc.next();

if(str1.equals(str2)) {
//'==' ๋Œ€์‹  '.equals()'๋ฅผ ์‚ฌ์šฉํ•ด ๋ด…์‹œ๋‹ค.
    System.out.println("์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!");
}else {
    System.out.println("์ž…๋ ฅ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

System.out.println(str1.equals(str2));

 

 

์ฝ˜์†” :

hello
์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!
true

.equals()๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ,

์˜๋„ํ•œ ๋Œ€๋กœ "์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!" ๋ฉ”์‹œ์ง€๋„ ์ž˜ ์ถœ๋ ฅ๋˜๊ณ ,

str1==str2์˜ ๊ฒฐ๊ณผ๋„ true๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ“ '=='๋กœ ๊ฐ’์„ ๋น„๊ตํ•ด๋„ ๋˜๋Š” ๊ฒฝ์šฐ  : String์ด ์•„๋‹Œ '๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜'๋ฅผ ๋น„๊ตํ•  ๋•Œ

๐Ÿ™‹‍โ™‚๏ธ Q : 

int๋ฅผ ๊ฐ–๊ณ  ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๋•, '=='๋กœ ๊ฐ’์„ ๋น„๊ตํ•ด๋„ ์ž˜ ๋˜๋˜๋ฐ์š”...

 

๐Ÿ‘จ‍๐Ÿ’ป A :

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ์— String์ด ์•„๋‹ˆ๋ผ, 

[int, byte, short, long] / [float, double] / [boolean]์œผ๋กœ

๋น„์Šทํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ์›๋ž˜ ์˜๋„๋Œ€๋กœ true๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

int๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ด…์‹œ๋‹ค. 

 

์ฝ”๋“œ: 

int int1 = 25;
		
Scanner sc = new Scanner(System.in);
int int2 = sc.nextInt();
//์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ int1์— ๊ฐ’ 25๋ฅผ ๋„ฃ๊ณ , ์ฝ˜์†”์— 25๋ฅผ ์ž…๋ ฅํ•ด ๋ด…์‹œ๋‹ค.
//sc.nextLine(); ๋˜ํ•œ sc.next();๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

if(int1==int2) {
    System.out.println("์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!");
}else {
    System.out.println("์ž…๋ ฅ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

System.out.println(int1==int2);

 

์ฝ˜์†” :

25
์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!
true

์ฝ”๋“œ ์ˆ˜์ • ํ›„ int1๊ณผ int2์˜ ๊ฐ’์ด ์ผ์น˜ํ•˜๋„๋ก ์ž…๋ ฅํ•ด ๋ณด๋ฉด

"์ž…๋ ฅ ๋‚ด์šฉ ์ผ์น˜!" ๋ฉ”์‹œ์ง€๋„ ์ž˜ ๋‚˜์˜ค๊ณ ,

int1==int2์˜ ๊ฒฐ๊ณผ๋„ true๊ฐ€ ๋‚˜์˜ค๋„ค์š”.

 

์™œ String์€ ๊ทธ๋ ‡๊ฒŒ ๋˜์ง€ ์•Š๋Š” ๊ฑธ๊นŒ์š”?

 

 

 

๐Ÿ“ String์€ '๊ธฐ๋ณธํ˜•'์ด ์•„๋‹Œ '์ฐธ์กฐํ˜•' ๋ฐ์ดํ„ฐ ํƒ€์ž…

int, String ๋“ฑ ์ž๋ฃŒํ˜•data type์˜ ๊ตฌ๋ถ„์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

  • int๋Š” ๊ธฐ๋ณธํ˜•Primitive Type์— ์†ํ•˜๋ฉฐ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
    int ์™ธ์—๋„ [byte, short, long] / [float, double] / [char] / [boolean]๊นŒ์ง€ ์ด 8๊ฐ€์ง€ ์œ ํ˜•์ด '๊ธฐ๋ณธํ˜•'์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฃŒ์ถœ์ฒ˜ :https://loustler.io/languages/Java-primitive-type/

 

 

  • String์€ ์ฐธ์กฐํ˜•Reference Type์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” '์ฃผ์†Œ'๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    Java์—์„œ String์€ '๊ฐ์ฒดObject'์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค.
String str1 = "hello";

์œ„์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด String ๋ณ€์ˆ˜ str1์„ ์„ ์–ธํ•˜๊ณ  ์—ฐ์‚ฐ์ž '='๋กœ ๋ฌธ์ž์—ด "hello"๋ฅผ ๋Œ€์ž…ํ–ˆ์„ ๋•Œ,
str1์—๋Š” ์‹ค์ œ ๋ฌธ์ž์—ด์ธ "hello"๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
๊ทธ "hello"๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด์ง€์š”.

 

Java ๊ณต์‹ ๋ฌธ์„œ์˜ String ์ •์˜. String์€ java.lang.Object์˜ ํ•˜์œ„์— ์žˆ๋Š”, ์ผ์ข…์˜ '๊ฐ์ฒด'์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ“ ๋น„๊ต ์—ฐ์‚ฐ์ž '==' : ๊ธฐ๋ณธํ˜•๋ผ๋ฆฌ๋Š” "๊ฐ’"์„, ์ฐธ์กฐํ˜•๋ผ๋ฆฌ๋Š” "๊ฐ์ฒด ์ฃผ์†Ÿ๊ฐ’"์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ต ์—ฐ์‚ฐ์ž '=='๋Š” ๊ธฐ๋ณธํ˜• ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋Š” "๊ฐ’"์„ ๋น„๊ตํ•˜๊ณ , 
์ฐธ์กฐํ˜•์— ๋Œ€ํ•ด์„œ๋Š” "๊ฐ์ฒด ์ฃผ์†Ÿ๊ฐ’"์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ฅผ ๋น„๊ตํ•  ๋•Œ๋Š” ์„œ๋กœ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ๋™์ผํ•œ ๊ฐ์ฒด์—ฌ์•ผ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™๋”๋ผ๋„, ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด๋ผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

String์„ ์ €์žฅํ•œ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ–๋Š” ํ•ด์‰ฌ ์ฃผ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ,
"System.identifyHashcode"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ž์˜ ์˜ˆ์ œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ด…์‹œ๋‹ค.

 

์ฝ”๋“œ : 

String str1 = "hello";
//String ๋ณ€์ˆ˜ str1์„ ์„ ์–ธํ•œ ๋‹ค์Œ "hello"๋ฅผ ๋Œ€์ž…ํ•ด ์ฃผ๊ณ ,

Scanner sc = new Scanner(System.in);
String str2 = sc.next();
//str2๋Š” Scanner๋กœ ์ž…๋ ฅ์„ ๋ฐ›์•„, ์ฝ˜์†”์— hello๋ฅผ ์ž…๋ ฅํ•œ ๋‹ค์Œ, 

System.out.println("str1์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str1));
System.out.println("str2์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str2));
//String ๋ณ€์ˆ˜ str1, str2๊ฐ€ ์‹ค์ œ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

System.out.println(str1 == str2);
//๊ทธ๋ฆฌ๊ณ  str1 == str2๋ฅผ ์ถœ๋ ฅํ•ด ๋ด…์‹œ๋‹ค.

์ฝ˜์†” : 

hello
str1์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 1617791695
str2์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 1012570586 
false

str2์—๋„ ๋˜‘๊ฐ™์€ "hello"๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์คฌ์ง€๋งŒ,

str1์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’์€ 1617791695,
str2์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’์€ 1012570586๋กœ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*์ถœ๋ ฅ๋˜๋Š” ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’์€ PC๋งˆ๋‹ค ์ƒ์ดํ•ฉ๋‹ˆ๋‹ค.

 

'=='๋Š” ์ฐธ์กฐํ˜•์— ๋Œ€ํ•ด์„œ๋Š” "๊ฐ’"์€ ๋ฌผ๋ก  "๊ฐ์ฒด ์ฃผ์†Ÿ๊ฐ’"๊นŒ์ง€ ๋น„๊ตํ•œ๋‹ค๊ณ  ๋ง์”€๋“œ๋ ธ์ฃ .

๋‘ ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜ str1, str2๋ฅผ '=='์œผ๋กœ ๋น„๊ตํ–ˆ์„ ๋•Œ,

๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด์€ str1, str2 ๋ชจ๋‘ "hello"๋กœ ์ผ์น˜ํ• ์ง€ ๋ชฐ๋ผ๋„,

๊ทธ "hello"๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— 

str1==str2์˜ ๊ฒฐ๊ณผ ์—ญ์‹œ false๋กœ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ“ String์˜ ๊ฐ’์„ ๋น„๊ตํ•ด ์ฃผ๋Š” '.equals()'

๋”๋ณด๊ธฐ

Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.

[https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#equals-java.lang.Object-]

Java ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๋Š” String์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ, .equals()์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด String์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๋น„๊ตํ•˜๋Š”๋ฐ,
๊ทธ ๊ฐ์ฒด๊ฐ€ null์ด ์•„๋‹ˆ๊ณ , ๋˜‘๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” String ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์•ž์„œ ๋ณด์—ฌ๋“œ๋ฆฐ ์˜ˆ์‹œ์™€ ๊ฐ™์ด, String์˜ ์ฃผ์†Ÿ๊ฐ’์ด ์•„๋‹ˆ๋ผ String์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ์— ์•Œ๋งž์€ ๊ธฐ๋Šฅ์ด์ฃ .

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ String์˜ ๊ฐ’์„ ๋น„๊ตํ•ด ์ค„ ๋•Œ๋Š” '=='๊ฐ€ ์•„๋‹Œ '.equals()'๋ฉ”์„œ๋“œ๋ฅผ ์จ์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ“ String์ด๋ผ๋„ '=='์ด ํ†ตํ•˜๋Š” ๊ฒฝ์šฐ : '๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹'์œผ๋กœ ๋‘ String์„ ์„ ์–ธํ–ˆ์„ ๋•Œ

๐Ÿ™‹‍โ™‚๏ธ Q : 

๋ฐฉ๊ธˆ String ๋ณ€์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ '=='์œผ๋กœ ๋น„๊ตํ•ด ๋ดค๋Š”๋ฐ, true๊ฐ€ ์ž˜ ๋‚˜์˜ค๋Š”๋ฐ์š”...

 

๐Ÿ‘จ‍๐Ÿ’ป A :

๋‹ค์Œ๊ณผ ๊ฐ™์ด '=='์„ ์‚ฌ์šฉํ•˜์…จ๋‹ค๋ฉด true๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ : 

String str3 = "hello";
String str4 = "hello";

System.out.println(str3==str4);

 

์ฝ˜์†” : 

true

 

 

๋ณดํ†ต String์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

String str = "hello";

 

์ด๋Š” ๋งˆ์น˜ int, char, boolean ๊ฐ™์€ ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํก์‚ฌํ•ฉ๋‹ˆ๋‹ค.

(๊ทธ๋Ÿฐ ๋ฐฉ์‹์„ '๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

 

๊ทธ๋Ÿฐ๋ฐ ์•ž์„œ ๋ง์”€๋“œ๋ ธ๋“ฏ์ด String์€ ์—„์—ฐํžˆ ์ฐธ์กฐํ˜•์ด๊ณ , ๋˜ ์ผ์ข…์˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๊ฐ์ฒด๋“ค์„ ์„ ์–ธํ•˜๋ ค๋ฉด, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž 'new'๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋˜๊ฒ ์ฃ . 

์‹ค์ œ๋กœ String๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ new๋ฅผ ์ด์šฉํ•ด ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ClassType c = new ClassType();
//์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹

String str = new String("hello");
//๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ฒ˜๋Ÿผ new๋ฅผ ์ด์šฉํ•ด String ์„ ์–ธํ•˜๊ธฐ

 

String์ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๊ณผ ๋‹ฌ๋ฆฌ 'new' ์—†์ด๋„ '๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹'์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ด์œ ๋Š”,

String์˜ ํŠน์„ฑ์ƒ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์ด ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์ฐจ์›์—์„œ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

 

https://bbubbush.tistory.com/22

 

์™œ String์€ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„๊นŒ?

๋“ค์–ด๊ฐ€๋ฉฐ String literalString = "ABC"; String objectString = new String("ABC"); ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์œ„ ์ฝ”๋“œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ๋‹ค. Java์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ์˜ˆ์ œ์ด๋ฏ€๋กœ ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹ 

bbubbush.tistory.com

 

 

์œ„์™€ ๊ฐ™์ด String์„ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•  ๋•Œ๋Š”, 'new'๋กœ ์„ ์–ธํ–ˆ์„ ๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ,

๋ณ€์ˆ˜๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์ž๊ธฐ๋งŒ์˜ ๊ณต๊ฐ„์ด ์•„๋‹ˆ๋ผ

'์ŠคํŠธ๋ง ์ƒ์ˆ˜ ํ’€String constant pool'์ด๋ผ๋Š” ๊ณต๋™ ๊ณต๊ฐ„์— ๋ฌธ์ž์—ด์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ณต๋™ ๊ณต๊ฐ„์— ์ €์žฅ๋œ๋‹ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋˜ํ•œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š” ๋ง์ด๊ฒ ์ง€์š”.

 

๊ณผ์—ฐ ์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ฐฉ์‹์œผ๋กœ String ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด ๋ณด๊ณ , 

๋˜‘๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ง‘์–ด๋„ฃ์€ ๋‹ค์Œ,

๊ฐ๊ฐ ์ฃผ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•ด ๋ณด๊ณ  '=='์œผ๋กœ ๋น„๊ต๋„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ : 

String str3 = "hello";
String str4 = "hello";
//๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๋‘ String ์„ ์–ธ

String str5 = new String("hello");
String str6 = new String("hello");
//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” new๋ฅผ ์ด์šฉํ•ด ๋‘ String ์„ ์–ธ

System.out.println("str3์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str3));
System.out.println("str4์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str4));
System.out.println("str5์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str5));
System.out.println("str6์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : " + System.identityHashCode(str6));
//System.identityHashCode()๋ฅผ ์ด์šฉํ•ด ๊ฐ String์˜ ์ฃผ์†Ÿ๊ฐ’์„ ํ™•์ธ

System.out.println("str3==str4 : " + (str3==str4));
System.out.println("str5==str6 : " + (str5==str6));
//'=='์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์น˜ ์—ฌ๋ถ€ ํ™•์ธ.
/*๋ฐ˜๋“œ์‹œ str3==str4, str5==str6์„ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ์‹คํ–‰ํ•ฉ์‹œ๋‹ค. 
์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋น„๊ต์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„๋ณด๋‹ค ๋†’๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.*/

 

์ฝ˜์†” : 

str3์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 1617791695
str4์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 1617791695
//๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•œ ๋‘ ๋ณ€์ˆ˜๋Š” ์ฃผ์†Ÿ๊ฐ’์ด ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

str5์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 125993742
str6์˜ ํ•ด์‰ฌ ์ฃผ์†Ÿ๊ฐ’ : 1192108080

str3==str4 : true
//๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•œ ๋‘ ๋ณ€์ˆ˜๋ฅผ '=='์œผ๋กœ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ, "true"๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.
str5==str6 : false
//new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๋‘ ๋ณ€์ˆ˜๋ฅผ '=='์œผ๋กœ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๋Š” "false"๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด,

๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์„ ์–ธํ•œ ๋‘ ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Ÿ๊ฐ’์„ ๊ฐ–๊ณ ,

'=='์œผ๋กœ ๋น„๊ตํ–ˆ์„ ๋•Œ๋„ ๊ฒฐ๊ณผ๊ฐ€ true๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋‹ค๋งŒ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ String์„ ๋น„๊ตํ•  ๋•Œ๋Š”,

Scanner๋ฅผ ์ด์šฉํ•˜๋Š” ๋“ฑ ์ฃผ์†Ÿ๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ String์„ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์—, 

'=='๊ฐ€ ์•„๋‹Œ '.equals()'๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

(์ˆ˜์ • : 2024.08.26)

 

[์ฐธ๊ณ ์ž๋ฃŒ]

- Java์˜ ์ •์„, 3rd Edition, ๋‚จ๊ถ์„ฑ

- https://bbubbush.tistory.com/22

Comments