public class StringTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="AAA";
String str2="AAA";
//관계연산자: 연산 결과는 true OR false
if(str1==str2) {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
String str3= new String("AAA");
if(str1==str3) {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
}
}
같다
다르다
str1, str2, str3 은 전부 AAA로 같은 문자열인데 왜 다르게 나올까
클래스로 만드는 모든 객체(변수)는 주소를 기억하는 참조형 변수이다
문자열이 최초로 만들어지면 메모리 어딘가에 문자열이 생성되고 문자열이 생성된 주소값이 변수에 저장된다
자바에는 포인터가 없지만 C언어의 포인터와 비슷한 개념이라고 이해하면 된다
==를 사용해서 같은가 비교할 수 있는 데이터는 기본자료형과 NULL만 가능
String str1="AAA"; //str1 에는 "AAA"가 생성된 메모리의 주소가 들어간다
//메모리에 같은 내용의 문자열이 있으면 다시 만들지 않고 기존에 있는 문자열의 주소값이 변수에 저장된다
String str2="AAA"; //str2 에는 str1에 저장된 메모리주소가 저장 됨
==를 사용해서 비교했으므로, 변수에 저장된 문자열 자체가 아닌 주소를 비교한 것이다
//new라는 예약어를 사용해서 객체를 생성하게 되면 메모리에 같은 내용이 있나 상관없이 무조건 다시 만든다
String str3= new String("AAA");
new라는 예약어를 사용해서 객체를 생성하게 되면 메모리에 같은 내용이 있나 상관없이 무조건 다시 만든다
따라서 str1 과 str3 의 메모리주소는 다름!
메모리 주소가 아닌 문자열끼리만 비교하고 싶다면!
if(str1.equals(str3)) {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
문자열을 비교하는 경우, 반드시 equals() 메소드를 사용해서 비교
최종 수정 코드
public class StringTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//클래스로 만드는 모든 객체(변수)는 주소를 기억하는 참조형 변수이다
//문자열이 최초로 만들어지면 메모리 어딘가에 문자열이 생성되고
//문자열이 생성된 주소값이 변수에 저장된다 자바에는 포인터가 없지만, C언어의 포인터와 비슷한 개념이라고 이해하면 된다
//==를 사용해서 같은가 비교할 수 있는 데이터는 기본자료형과 NULL만 가능
String str1="AAA"; //str1 에는 "AAA"가 생성된 메모리의 주소가 들어간다
//메모리에 같은 내용의 문자열이 있으면 다시 만들지 않고 기존에 있는 문자열의 주소값이 변수에 저장된다
String str2="AAA"; //str2 에는 str1에 저장된 메모리주소가 저장 됨
//관계연산자: 연산 결과는 true OR false
//==를 사용해서 비교했으므로, 변수에 저장된 문자열 자체가 아닌 주소를 비교한 것이다
if(str1==str2) {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
//new라는 예약어를 사용해서 객체를 생성하게 되면 메모리에 같은 내용이 있나 상관없이 무조건 다시 만든다
String str3= new String("AAA");
//문자열을 비교하는 경우, 반드시 equals() 메소드를 사용해서 비교
if(str1.equals(str3)) {
System.out.println("같다");
}
else {
System.out.println("다르다");
}
}
}
같다
같다
length
import java.util.Scanner;
public class StringTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력하세요: ");
String str= sc.nextLine();
System.out.println("입력한 문자열의 크기: " +str.length());
sc.close();
}
}
문자열 입력하세요:
abcedefsdfd
입력한 문자열의 크기: 11
trim
import java.util.Scanner;
public class StringTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력하세요: ");
String str= sc.nextLine();
//length() => 변수에 저장된 문자열을 구성하는 문자의 개수를 얻어 온다
System.out.println("입력한 문자열의 크기: " +str.length());
System.out.println("입력한 문자열에서 공백을 제거한 문자열의 크기: " +str.trim().length());
sc.close();
}
}
trim() => 문자열 앞, 뒤의 불필요한 공백을 제거한다 (사이에 있는 것은 제거 못함)
toUpperCase / toLowerCase 영문자를 무조건 대문자/소문자로 변환
charAt(index) 문자열에서 index 번째 문자 1문자를 얻어온다
import java.util.Scanner;
public class StringTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("문자열 입력하세요: ");
String str= sc.nextLine();
//length() => 변수에 저장된 문자열을 구성하는 문자의 개수를 얻어 온다
//System.out.println("입력한 문자열의 크기: " +str.length());
//trim() => 문자열 앞, 뒤의 불필요한 공백을 제거한다 (사이에 있는 것은 제거 못함)
//System.out.println("입력한 문자열에서 공백을 제거한 문자열의 크기: " +str.trim().length());
//toUpperCase() => 영문자를 무조건 대문자로 변환
System.out.println("무조건 대문자로 출력: " +str.toUpperCase());
//toLowerCase() => 영문자를 무조건 소문자로 변환
System.out.println("무조건 대문자로 출력: " +str.toLowerCase());
//charAt(index) => 문자열에서 index 번째 문자 1문자를 얻어온다. 인덱스 위치 계산할 때는 0부터
System.out.println("3번째 문자: " +str.charAt(2));
sc.close();
}
}
문자열 입력하세요:
abcdefg
무조건 대문자로 출력: ABCDEFG
무조건 대문자로 출력: abcdefg
3번째 문자: c
728x90
'Dev. > java' 카테고리의 다른 글
Java class (0) | 2022.04.27 |
---|---|
Java 조건문(if~else) (0) | 2022.04.23 |
Java Scanner/ next, netxLine (0) | 2022.04.23 |
연산자/제어문 (0) | 2022.04.20 |
Java 연산자/instanceof 연산자 (0) | 2022.04.18 |
댓글