2013년 8월 9일 금요일

[OracleJava커뮤니티]자바에서의 문자열(java.lang.String)에 대하여 알아 보겠습니다.

자바에서의 문자열(java.lang.String)에 대하여 알아 보겠습니다. 자바에서 문자열은 String 클래스에서 처리하는데 아래 예문을 보시죠


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  
  

자바에서는 문자열을 객체로서 다룹니다.String클래스는 자바와 함께 제공되는 표준 클래스 이며 유니코드(UniCode)를 사용하므로 각각의 문자는 2Byte를 차지합니다. 문자열을 만드는 방법의 아래 처럼 2가지 방법이 있습니다.

String s = new String(“jclee”);
String s = “jclee”;


‘+’연산시 한쪽의 타입이 String 이라면 나머지쪽도 자동으로 String으로 변환되어 문자열이 더해지게 되는 것입니다.

String a = “abc”; int i=5;
System.out.println(a + i);

문자열의 길이를 알기 위해서는 String.length()를 사용 합니다.

[예제1]

public class StringTest {
public static void main(String[] args) throws java.io.IOException {
String a;
String b=null;
String c="";
if (b == null) {
System.out.println("b는 아무것도 참조하지 않습니다...");
}
//아래의 경우 Compile시 NullPointEXception이 발생한다.
//System.out.println("b=null일때 b의 길이 -->"+b.length());

//아래의 두경우 모두 a가 초기화 되지 않았다는 오류발생
//if (a == "1234"){
// System.out.println("a는 '1234'와 같습니다...");
//}
//if (a == null) {
// System.out.println("a는 아무것도 참조하지 않습니다...");
//}

/////////////////////////////////////////////////////////
System.out.println(c.hashCode());
if (c == null) {
System.out.println("c는 아무것도 참조하지 않습니다...");
}

if (c == "") {
System.out.println("c는 "" 입니다...");
}
if (c == " ") {
System.out.println("c는 " " 입니다...");
}
if (c.equals(null)){
System.out.println("c는 아무것도 참조하지 않습니다...");
}
if (c.equals("")){
System.out.println("c는 "" 입니다...");
}
if (c.equals(" ")) {
System.out.println("c는 " " 입니다...");
}
//아래의 경우 c가 ""이므로 NullPointException이 발생한다.
//if (c.compareTo("")==0){
// System.out.println("c는 "" 입니다...");
//}
System.out.println("""의 길이 -->"+c.length());

/////////////////////////////////////////////////////////
String d=" ";
System.out.println(d.hashCode());
if (d == null) {
System.out.println("d는 아무것도 참조하지 않습니다...");
}
if (d == "") {
System.out.println("d는 "" 입니다...");
}
if (d == " ") {
System.out.println("d는 " " 입니다...");
}
if (d.equals(null)){
System.out.println("d는 아무것도 참조하지 않습니다...");
}
if (d.equals("")){
System.out.println("d는 "" 입니다...");
}
if (d.equals(" ")) {
System.out.println("d는 " " 입니다...");
}
// 이 경우에도 NullPointException이 발생한다.(주의)
//if (d.compareTo(" ")==0){
// System.out.println("d는 " " 입니다...");
//}
System.out.println("" "의 길이 -->"+d.length());
d = d.trim();
System.out.println("trim후 " "의 길이 -->"+d.length());
}
}

[결과]
b는 아무것도 참조하지 않습니다...
0
c는 "" 입니다...
c는 "" 입니다...
""의 길이 -->0
32
d는 " " 입니다...
d는 " " 입니다...
" "의 길이 -->1
trim후 " "의 길이 -->0




[예제2]

//== 연산자인 경우 양쪽에 객체가 오는 경우 값이 같더라도 참조하고 있는 곳(주소)이 틀리면 다르다고 합니다.

class StringTest2 {
public static void main(String[] args) {
String a="1234";
String b="12";
String c="34";
b += c;

// ==인 경우 실제 값이 같아도 참조하고 있는것이 틀리면 false
System.out.println("a : " +a+" b : "+b);
if (a == b) {
System.out.println("a와b 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("a와b 두문자열 동일한 문자열을 참조하지 않는다.");
}

//c="1234";
c = new String("1234");
System.out.println("b : " +b+" c : "+c);
if (b == c) {
System.out.println("b와c 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("b와c 두문자열 동일한 문자열을 참조하지 않는다.");
}

System.out.println("a : " +a+" c : "+c);
if (a == c) {
System.out.println("a와c 두문자열 동일한 문자열을 참조한다.");
}
else {
System.out.println("a와c 두문자열 동일한 문자열을 참조하지 않는다.");
}
}
}

[결과]
a : 1234 b : 1234
a와b 두문자열 동일한 문자열을 참조하지 않는다.
b : 1234 c : 1234
b와c 두문자열 동일한 문자열을 참조하지 않는다.
a : 1234 c : 1234
a와c 두문자열 동일한 문자열을 참조하지 않는다.

댓글 없음:

댓글 쓰기