문자열의 널 또는 널 값이 판단됩니다
개발 과정에서 나는 종종 다음과 같은 잘못된 사용법에 직면합니다.
1. 오류 사용 1 :
if (name == "") {// 뭔가} 2. 오류 사용 2 :
if (name.equals ( "")) {// 뭔가}
3. 오류 사용법 3 :
if (! name.equals ( "")) {// 뭔가}
설명하자 :
위의 오류 사용 1은 초보자가 저지르는 실수이며 구문 자체가 괜찮고 Java 컴파일러는 컴파일 할 때 오류를보고하지 않기 때문에 발견 될 가능성이 가장 낮습니다. 그러나이 조건은 런타임 중에 프로그램의 버그를 유발할 수 있으며 결코 사실이 아닙니다. 다시 말해, IF 블록의 진술은 결코 실행되지 않습니다.
위에서 언급 한 사용 2와 사용법 3은 많은 Java 수익성도 쉽게 만들 수있는 실수를 포함하여 작성됩니다. 왜 틀렸습니까? 어쩌면 당신은 당황 할 것입니다.
그렇습니다. 그들의 글은 정확하지만 널 판단 조건이 부족합니다. 이름 = null이면 어떻게 될까요? 결과적으로 귀하의 프로그램은 NullPointerException 예외를 던지고 시스템이 정지되어 더 이상 정상적인 서비스를 제공하지 않습니다.
물론, 당신이 이전에 이름으로 귀중한 판단을 한 적이 있다면, 예외입니다.
글을 쓰는 올바른 방법은 먼저 이름의 조건을 추가해야합니다! = null, 예 :
if (name! = null &&! name.equals ( "")) {// 뭔가}또는
if (! "". equals (name)) {// write "" "이름이 null인지 아닌지에 관계없이 오류가 없습니다. // 뭔가}
여기에서 간단한 예를 들어 보겠습니다.
TestNullorEmpty.java
공개 클래스 테스트 {public static void main (String args []) {String value = null; TestNullorEmpty (값); value = ""; TestNullorEmpty (값); value = ""; TestNullorEmpty (값); value = "Hello Me"; TestNullorEmpty (값); } static void testNullorEmpty (문자열 값) {if (value == null) {System.out.println ( "value is null"); } else if ( ".".Equals (value)) {System.out.println ( "값은 비어 있지만 널 null"); } else {system.out.println ( "값은 /" "" + value + " /" "); } if (value == "") {// ng의 언더 라이팅 //이 글을 사용하지 마십시오}}} 컴파일 실행 :
C :/> javac testnullorempty.javac :/> java testnullorempty
값은 null입니다. 값은 비어 있지만 null.value는 ""값은 "hello me!"입니다.
문자열 주소를 동일하게 비교합니다
패키지 com; public class a { / ** * @param args * / public static void main (String [] args) {문자열 a = "hello"; 문자열 b = "HE"; 문자열 c = a.substring (0, 2); System.out.println (b.equals (c)); // true system.out.println (b == c); // false String d = new String ( "Hello"); System.out.println (d.equals (a)); // true system.out.println (d == a); // false string e = new StringBuilder ( "Hello"). toString (); System.out.println (e.equals (a)); // true system.out.println (e == a); // false system.out.println (e.equals (d)); // true system.out.println (e == d); // false f = "hello"; System.out.println (f.equals (a)); // true system.out.println (f == a); // true system.out.println (f == "hello"); // true system.out.println (f == "hell"+"o"); // true 문자열 g = b+"llo"; System.out.println (g == f); // false string h = "He"+"llo"; System.out.println (h == f); // true}}요약 :
1. 새로운 문자열은 메모리를 재 할당하는 것입니다. 문자열은 공유되지 않으며 여러 개의 새로운 새로운 것이 공유되지 않습니다.
2. 스 플라이싱 또는 가로 채는 문자열과 정적 문자열 변수는 문자열 함수를 통해 공유되지 않습니다.
3. 플러스 표지판으로 얻은 문자열에는 두 가지 상황이 있습니다.
"HE"+"llo"는 정적 문자열이며 공유됩니다
b 문자열 a = "HE"; a+"llo"는 정적 문자열이 아니며 공유되지 않습니다.