이 기사의 예제에서는 Java의 문자열 사용법을 요약합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
문자열의 본질은 char 유형의 배열이지만 Java에서는 큰따옴표 ""로 선언된 모든 문자열이 String 클래스의 객체입니다. 이는 또한 Java의 완전한 객체 지향 언어 특성을 반영합니다.
문자열 클래스
1. String 클래스 객체는 상수 문자열을 나타냅니다. 길이는 불변입니다. 즉, String 클래스의 인스턴스가 생성되면 이 인스턴스가 나타내는 문자열을 변경할 수 없습니다. 유사하다
str = str + "안녕하세요";
이 작업은 기본적으로 두 개의 String 개체 str과 "Hello"를 결합하여 새 String 개체를 만든 다음 새 String 개체의 참조를 str에 할당합니다. 이 작업을 광범위하게 사용하면 성능 결함이 발생할 수 있습니다. 문자열 내용을 자주 변경해야 하는 경우 StringBuffer 클래스 또는 StringBuilder 클래스를 사용해야 합니다. 작은 프로그램을 사용하여 String 클래스와 StringBuffer 클래스 간의 성능 차이가 얼마나 큰지 확인할 수 있습니다.
class StringTest { public static void main(String[] args) { /** * String 객체와 StringBuffer 객체를 각각 사용하여 10,000개의 추가 작업을 수행합니다. * 테스트 실행 시간 * 2013.3.18 */ String constStr = "" long lTime = System . currentTimeMillis(); for(int i = 0; i < 10000; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); StringBuilder strBuf = new StringBuilder("") lTime = System.currentTimeMillis() for(int i = 0 ; i < 10000 ; ++i) strBuf.append(String.valueOf(i)); 문자열: "+(System.currentTimeMillis()-lTime)); } }실행 결과:
StringBuilder는 몇 초가 걸리지만 String 클래스는 300ms가 걸리는 것을 볼 수 있는데, 이는 엄청난 성능 차이를 보여줍니다.
StringBuilder와 StringBuffered는 모두 가변 길이(변경 가능) 문자열 개체를 나타냅니다. 차이점은 StringBuffered 클래스는 스레드 동기화 측면에서 일부 안전한 처리를 수행하는 반면 StringBuilder는 그 반대를 수행한다는 것입니다. 따라서 한 줄로만 프로그래밍하는 경우 StringBuilder가 StringBuffered보다 약간 더 효율적입니다(실제로 차이는 크지 않습니다).
2. "Hello World"는 문자열 개체입니다. 다음과 같이 "Hello World"를 개체로 직접 사용할 수 있습니다.
if("안녕하세요".equals("안녕하세요")) System.out.println("예");출력 결과는 예입니다.
3. 문자열 객체를 비교할 때는 단순히 ==를 사용하여 판단하는 것이 아니라 equals() 메서드를 사용해야 합니다. ==는 두 참조 이름이 참조하는 인스턴스가 동일한지 비교하므로, equals() 메서드는 두 객체의 문자열이 동일한지 비교합니다.
일반적인 질문은 다음 코드 조각이 총 몇 개의 String 개체를 생성합니까?입니다.
String str1 = new String("안녕하세요");String str2 = new String("안녕하세요");아마도 대부분의 사람들은 2라고 대답할 것이다. 하지만 실제로는 총 3개의 String 객체가 여기서 생성됩니다. str1 및 str2 외에도 "Hello"도 String 객체라는 점을 잊지 마세요.
4. 스트링 풀(Pool)
Java는 실행 시 문자열 풀을 유지합니다. 큰따옴표로 선언된 문자열이 나타나면 JVM은 먼저 동일한 문자열 객체(동일한 문자 포함)가 메모리에 있는지 확인합니다. 존재하는 경우 이미 메모리에 존재하는 객체에 대한 참조를 반환합니다. 존재하지 않으면 새 String 객체를 생성합니다. 이렇게 하면 메모리가 절약됩니다. 다음 코드에서 볼 수 있듯이 str1과 str2는 실제로 동일한 String 개체를 가리킵니다.
String str1 = "안녕하세요";String str2 = "안녕하세요";
5. 명령줄 매개변수 수신
메인 메소드를 선언할 때 String[] 유형의 형식 매개변수를 선언합니다. 이 String 객체 배열은 이 프로그램을 실행할 때 사용자가 전달한 명령줄 매개변수를 저장합니다. C 언어와 달리 Java의 명령줄 매개변수는 프로그램 이름 뒤의 첫 번째 변수에서 시작됩니다. 즉, String[] 데이터에는 애플리케이션 이름이 포함되지 않습니다. 예를 들어:
class strCmd { public static void main(String[] args) { if(args.length > 0) { for(String str : args) System.out.println(str) } } }java strCmd Hello World! 실행 시 출력은 다음과 같습니다.
6. 문자열 분리
C 언어의 strtok과 유사하게 String 클래스에는 지정된 형식으로 문자열을 분리할 수 있는 분할 메서드도 있습니다. 분할 메소드는 분리된 각 문자열을 나타내는 String 객체의 배열을 반환합니다. 좋다:
class strSplit { public static void main(String[] args) { String str = "Hello/tWorld/tI/tLove/tYou!" System.out.println("원본 문자열: " + strArr); str.split("/t"); for(String s : strArr) System.out.println(s) } }그 중 Split() 메소드의 매개변수는 정규식일 수 있다. java.util 패키지에 있는 Matcher 클래스의 정적 메서드 match()를 사용하여 문자열이 정규식과 일치하는지 확인할 수 있습니다.
String 클래스에는 다른 많은 강력한 기능이 있으므로 API 문서를 읽는 방법을 배워야 합니다. 여기서 영어의 중요성이 드러납니다...
이 글이 모든 사람의 Java 프로그래밍에 도움이 되기를 바랍니다.