✔ String 클래스는 byte(char) 배열을 통해 문자열을 저장하고 표현
✔ JVM 내부 메모리에서의 저장 모습 👇
리터럴로 생성 (다이렉트로 값을 넣기)
메서드를 활용하여 생성 (new
키워드를 이용하여 값을 넣기)
public class StringTest {
public static void main(String[] args) {
// 1️⃣
String s1 = "java";
String s2 = "java";
// 2️⃣
String s3 = new String("java");
String s4 = new String("java");
if(s1 == s2 ) {
System.out.println("같습니다.");
} else {
System.out.println("다릅니다.");
}
if(s3 == s4) {
System.out.println("같습니다.");
} else {
System.out.println("다릅니다.");
}
}
}
[실행 결과]
같습니다.
다릅니다.
👉 리터럴은 상수의 일종으로 변하지 않는 값으로, 변수에서 이미 메모리에 저장이 되어 있던 값을 담고자 할때 특정 인스턴스 풀에 있는 해당 값을 그대로 참조하게 됨 (결국 같은 공간을 가리킴으로써 주소값이 같음)
👉 new
를 이용한 객체를 생성함으로써 메모리에 각자 다른 위치에 다른 주소값을 가지고 생성되고, ==
을 이용하는 것은 객체의 주소값을 비교 하기 때문에 다릅니다
라는 결과가 출력
✔ 객체와 객체가 같은 것인지 비교한다.
public class Test {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
String s4 = new String("Java");
if(s1 == s2)
System.out.println("true");
else
System.out.println("false");
if(s3 == s4)
System.out.println("true");
else
System.out.println("false");
if(s3.equals(s4))
System.out.println("true");
else
System.out.println("false");
}
}
[실행 결과]
true
false
true
✔ 문자열 해당 인덱스의 값을 반환한다.
public class Test {
public static void main(String[] args) {
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);
System.out.println(charValue);
}
}
[실행 결과]
프
✔ 해당 단어의 인덱스를 반환한다.
✔ 단어가 없으면 -1을 반환한다.
public class Test {
public static void main(String[] args) {
String str = "the cat is on the table";
int index = str.indexOf("table");
if(index ==-1)
System.out.println("table은 없습니다.");
else
System.out.println("table의 위치: " + index);
}
}
[실행 결과]
table의 위치: 18
✔ 문자열 길이를 반환한다.
✔ 공백도 포함된다.
public class Test {
public static void main(String[] args) {
String str = "the cat is on the table";
System.out.println(str.length());
}
}
[실행 결과]
23
👉 문자열의 처음과 마지막의 공백을 제거하는 메서드
가운데 공백은 제거해주지 않음
-> replace 함수를 사용해 제거해야 함
public class StringEx {
public static void main(String[] args) {
String trimStr = " I Love you ";
System.out.println(trimStr);
System.out.println(trimStr.trim());
}
}
[실행 결과]
I LOVE YOU
I LOVE YOU
👉 Split은 구분자를 기준으로 문자열을 나누어 배열로 저장하여 리턴하는 메서드
✔️ 문법
1️⃣ split(String regex) : 문자열을 정규식에 맞춰서 분리
public class StringEx {
public static void main(String[] args) {
String[] tokens = "I am a boy".split(" ");
for (String token : tokens) {
System.out.println(token);
}
}
}
[실행 결과]
I
am
a
boy
// 구분자 여러개
public class StringEx {
public static void main(String[] args) {
String str = "안녕하세요,이메일주소는 hongil@naver.com";
String[] ArraysStr = str.split(",|@|-| ");
for(String s : ArraysStr)
System.out.println(s);
}
}
[실행 결과]
안녕하세요
이메일주소는
hongil
naver.com
2️⃣ split(String regex, int limit) : 위와 같으나 limit만큼 문자열을 자름
public class StringEx {
public static void main(String[] args) {
String str = "123 4 5 67 890 ";
String[] LimitThree = str.split(" ", 3);
for(int i = 0; i < LimitThree.length; i++)
System.out.println(i + "배열 : " + LimitThree[i]);
}
}
[실행 결과]
0배열 : 123
1배열 : 4
2배열 : 5 67 890
👉 valueOf() 메소드는 ()괄호 안의 해당 객체를 String 객체로 변환시키는 역활
public class StringEx {
public static void main(String[] args) {
String a = "1234";
String b = String.valueOf(10);
String c = String.valueOf(a);
String d = String.valueOf(true);
String e = String.valueOf(false);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
}
}
[샐행 결과]
1234
10
1234
true
false
Reference