String

declare string object
String str1=new String("test1");
String str2="test2";
String str3="test2";
by using above two ways can declare string object
1번째 new 예약어를 통하여서 객체를 생성하는 경우는 “test1” 문자열을 위한 메모리가 할당되고 새로운 객체가 생성된다.
하지만 2번째 str2=“test2”와 같이 생성자를 이용하지 않고 바로 문자열 상수를 가르키는 경우에는 str2가
기존에 만들어져 있던 “test2”라는 문자열 상수의 메모리를 가르키게 된다.
따라서 str2와 str3의 주소값은 같게 된다.
String fianl char[]
public final class String implements java.io.Serializable
StringTest1.java
package string;
public class StringTest1{
public static void main(String[] args){
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
String str3="abc";
String str4="abc";
System.out.println(str3==str4);
System.out.println(str3.equals(str4));
}
}

false

true

true

true

concat()
StringTest2.java
package string;
public class StringTest2 {
public static void main(String[] args){
String javaStr=new String("java");
String androidStr=new String("android");
System.out.println(javaStr);
System.out.println(" : "+System.identityHashCode(javaStr));
javaStr=javaStr.concat(androidStr);
System.out.println(javaStr);
System.out.println(" : "+System.identityHashCode(javaStr));
}
}

java

처음 문자열 주소의 값: 1304836502

javaandroid

연결된 문자열 주소 값: 225534817

StringBuffer & StringBuilder
String 클래스를 이용하여 문자열을 계속 연결하면 메모리가 많이 낭비된다.
이 문제를 해결하기 위해서 StringBuffer 와 StringBuilder 클래스를 이용한다.
StringBuffer 클래스는 스레드 작업시 문자열이 안전하게 변경되도록 보장해 준다.
하지만 StringBuilder 클래스는 안전을 보장해 주지는 못한다.(속도가 더 빠름)
StringBuilderTest.java
package string;
public class StringBuilderTest{
pubic static void main(String[] args){
String javaStr=new String("Java");
System.out.println("javaStr :"+System.identityHashCode(javaStr));
StringBuilder buffer=new StringBuilder(javaStr);
System.out.println(" buffer :"+System.identityHashCode(buffer));
buffer.append(" and");
buffer.append(" android");
buffer.append(" programming is fun!!!");
System.out.println(" buffer :"+System.identityHashCode(buffer));
javaStr=buffer.toString();
System.out.println(javaStr);
System.out.println(" javaStr :"+System.identityHashCode(javaStr));
}
}

javaStr 문자열 주소 :1304836502

연산전 buffer 메모리 주소 :225534817

연산 후 buffer 메모리 주소 :225534817

Java and android programming is fun!!!

연결된 javaStr 문자열 주소 :1878246837