logo

Java의 null에 대한 흥미로운 사실

거의 모든 프로그래밍 언어는 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

Java
public 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 예외 오류를 발생시킵니다. 

Java
public 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 작업의 중요한 속성입니다. 

Java
public 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 포인터 예외가 발생하지 않습니다. 

Java
public 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을 검사하는 데 유용할 수 있습니다. 

Java
public 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' 메소드는 기본 메소드에서 전달된 인수를 간단히 인쇄합니다.

Java
import 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은 다음과 같은 오류 메시지를 표시합니다. 이항 연산자 '+' '에 대한 피연산자 유형이 잘못되었습니다.

Java
import 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