거의 모든 프로그래밍 언어는 null과 결합되어 있습니다. null로 인해 고민하지 않는 프로그래머는 거의 없습니다. Java에서는 null이 java.lang과 연관되어 있습니다. NullPointer예외 . 이는 java.lang 패키지의 클래스이므로 null이 있거나 없거나 일부 작업을 수행하려고 할 때 호출되며 때로는 어디서 발생했는지조차 알 수 없습니다. 다음은 모든 Java 프로그래머가 알아야 할 Java의 null에 대한 몇 가지 중요한 사항입니다.
메이슨 공식
- Java에서 null은 값이나 참조가 없음을 나타내는 특수 값입니다. 변수나 개체에 현재 할당된 값이 없음을 나타내는 데 사용됩니다.
- null 값은 빈 문자열이나 빈 배열과 동일하지 않습니다. 빈 문자열은 문자가 포함되지 않은 문자열이고, 빈 배열은 요소가 포함되지 않은 배열입니다.
- Java 프로그래밍 언어에는 모든 참조 유형의 하위 유형인 'null'이라는 내장 널 유형이 있습니다. 그러나 인스턴스가 없고 인스턴스화할 수 없기 때문에 변수의 유형으로 사용할 수 없습니다.
- NullPointerException(NPE)의 위험을 피하기 위해 작업을 수행하기 전에 null 값을 확인하는 것이 모범 사례로 간주됩니다. NPE는 Java에서 가장 일반적인 예외 중 하나로 간주되며 프로그램에서 예기치 않은 동작이나 충돌을 일으킬 수 있습니다.
- Java에서 null은 메서드가 어떤 값도 반환하지 않음을 나타내는 데에도 사용됩니다. 이를 'void' 반환 유형이라고 합니다. void 메서드는 값을 반환하지 않으며 일반적으로 콘솔에 인쇄하거나 데이터베이스 업데이트와 같은 작업을 수행하는 데 사용됩니다.
- 또한 null은 메서드의 선택적 매개 변수에 대한 기본값으로 사용될 수 있습니다. 이를 통해 해당 매개변수의 값을 지정하지 않고 메소드를 호출할 수 있으며 대신 널값이 사용됩니다.
- int 또는 double과 같은 기본 데이터 유형의 값을 보유하려는 변수 또는 객체의 값으로 null을 사용하는 것은 컴파일 시간 오류를 발생시키므로 권장되지 않습니다.
- Java에서 null을 사용하면 혼란과 미묘한 버그가 발생할 수 있으므로 해당 동작과 오류를 방지하기 위해 코드에서 null을 올바르게 처리하는 방법을 알고 있는 것이 중요합니다.
1. null은 대소문자를 구분합니다. null은 Java에서 리터럴이며 키워드는 대소문자 구분 Java에서는 C 언어처럼 NULL 또는 0을 쓸 수 없습니다.
Java
public class Test { public static void main (String[] args) throws java.lang.Exception { // compile-time error : can't find symbol 'NULL' Object obj = NULL; //runs successfully Object obj1 = null; } }
산출:
5: error: cannot find symbol
can't find symbol 'NULL'
^
variable NULL
class Test
1 error
2. 참조 변수 값: Java의 모든 참조 변수에는 기본값이 있습니다. null .
Javapublic class Test { private static Object obj; public static void main(String args[]) { // it will print null; System.out.println("Value of object obj is : " + obj); } }
산출:
Value of object obj is : null 3. null 유형: 일반적인 오해와 달리 null은 Object가 아니거나 유형도 아닙니다. 이는 모든 참조 유형에 할당할 수 있는 특별한 값일 뿐이며 모든 유형에 null을 유형 캐스팅할 수 있습니다. 예:
// null can be assigned to String
String str = null;
// you can assign null to Integer also
Integer itr = null;
// null can also be assigned to Double
Double dbl = null;
// null can be type cast to String
String myStr = (String) null;
// it can also be type casted to Integer
Integer myItr = (Integer) null;
// yes it's possible no error
Double myDbl = (Double) null;
4. 오토박싱 및 언박싱: 자동 박싱 및 언박싱 작업 중에 기본 박싱 데이터 유형에 null 값이 할당되면 컴파일러는 단순히 Nullpointer 예외 오류를 발생시킵니다.
Javapublic class Test { public static void main(String[] args) throws java.lang.Exception { // An integer can be null so this is fine Integer i = null; // Unboxing null to integer throws // NullpointerException int a = i; } }
산출:
Exception in thread 'main' java.lang.NullPointerException
at Test.main(Test.java:6)
5. 인스턴스 연산자: Java instanceof 연산자는 객체가 지정된 유형(클래스, 하위 클래스 또는 인터페이스)의 인스턴스인지 여부를 테스트하는 데 사용됩니다. 런타임 시 Expression 값이 null이 아닌 경우 instanceof 연산자의 결과는 true입니다. 이는 유형 캐스팅 검사에 유용하게 만드는 instanceof 작업의 중요한 속성입니다.
Javapublic class Test { public static void main(String[] args) throws java.lang.Exception { Integer i = null; Integer j = 10; // prints false System.out.println(i instanceof Integer); // Compiles successfully System.out.println(j instanceof Integer); } }
산출:
false
true
6. 정적 방법과 비정적 방법: NullPointerException이 발생하는 null 값을 가진 참조 변수에 대해 비정적 메서드를 호출할 수는 없지만 null 값을 가진 참조 변수를 사용하여 정적 메서드를 호출할 수 있습니다. 정적 메서드는 정적 바인딩을 사용하여 결합되므로 Null 포인터 예외가 발생하지 않습니다.
Javapublic class Test { public static void main(String args[]) { Test obj = null; obj.staticMethod(); obj.nonStaticMethod(); } private static void staticMethod() { // Can be called by null reference System.out.println( " static method can be called by null reference & quot;); } private void nonStaticMethod() { // Can not be called by null reference System.out.print(" Non - static method - "); System.out.println( " cannot be called by null reference & quot;); } }
산출:
static method can be called by null referenceException in thread 'main'
java.lang.NullPointerException
at Test.main(Test.java:5)
7. == 및 != Java에서는 비교 연산자와 같지 않음 연산자가 null로 허용됩니다. 이는 Java의 객체로 null을 검사하는 데 유용할 수 있습니다.
Javapublic class Test { public static void main(String args[]) { // return true; System.out.println(null == null); // return false; System.out.println(null != null); } }
산출:
true
false
8 . 'null'은 메소드에서 인수로 전달될 수 있습니다.
Java에서 null을 인수로 전달하고 동일한 내용을 인쇄할 수 있습니다. 인수의 데이터 유형은 참조 유형이어야 합니다. 그러나 메소드의 반환 유형은 프로그램 논리에 따라 void int double 또는 다른 참조 유형과 같은 모든 유형이 될 수 있습니다.
여기서 'print_null' 메소드는 기본 메소드에서 전달된 인수를 간단히 인쇄합니다.
Javaimport java.io.*; class GFG { public static void print_null(String str) { System.out.println('Hey I am : ' + str); } public static void main(String[] args) { GFG.print_null(null); } }
출력 :
안녕하세요 저는 : null
9. null에 대한 '+' 연산자:
Java에서 null 값을 문자열 변수와 연결할 수 있습니다. Java에서는 연결로 간주됩니다.
여기서 null은 String 변수와만 연결됩니다. null과 String 이외의 다른 유형(Integer Double 등)에 '+' 연산자를 사용하면 오류 메시지가 발생합니다.
정수 a=null+7은 다음과 같은 오류 메시지를 표시합니다. 이항 연산자 '+' '에 대한 피연산자 유형이 잘못되었습니다.
Javaimport java.io.*; class GFG { public static void main(String[] args) { String str1 = null; String str2 = '_value'; String output = str1 + str2; System.out.println('Concatenated value : ' + output); } }
산출
Concatenated value : null_value