为什么Java接受"返回null"对于具有返回类型"字符"的函数原型。但不是返回类型" char"?

时间:2014-01-08 08:38:46

标签: java data-structures

我正在刷新我的Java知识,我正在使用一个函数,我使用返回类型char设置,然后我在函数中有一个return null语句,但Eclipse开始抱怨。只要我将char的返回类型替换为Character,它就会开始工作。

我理解Character是原始类型char的包装类,因此我可以理解Character类如何能够接受null并返回该“null对象”,而原始char无法表示null。但我不知道这个猜想是否属实,如果是真的,我想知道是否有人可以启发我的细节或指出我正确的方向。

6 个答案:

答案 0 :(得分:10)

Character是一个对象,因此nullCharacter引用的可接受值。

charprimitive,无法分配值null

答案 1 :(得分:3)

  

Character类如何能够接受null并返回该“null对象”,而原始char无法表示null。

只有对象可以包含null值。由于char是primitive type,因此它有自己的默认值,您无法为其分配null,而字符是对象,您可以指定null

对象默认为null

Data Type   Default Value (for fields)
byte                     0
short                    0
int                      0
long                     0L
float                    0.0f
double                   0.0d
**char**               '\u0000'
**String (or any object)**  null
boolean false

答案 2 :(得分:0)

CharacterObject,因此null是允许的。原始类型char被分配了默认值。

  • 由于CharacterObject,因此它由参考组成 变量和一个Object。如果未指定任何对象进行引用 变量,它不引用任何东西,即null
  • 如果char原语始终分配了默认值。

答案 3 :(得分:0)

Character继承Object类,Object null可以是Character。 而char是原始的

答案 4 :(得分:0)

Java和ActionScript编程语言中的原始包装类是java.lang包中提供的八个类之一,用于为八种基本类型提供对象方法。 Java中的所有原始包装类都是不可变的。 J2SE 5.0引入了原始类型的自动装箱到它们的包装器对象中,并将包装器对象自动拆箱到它们的原始值 - 包装器对象和原始值之间的隐式转换。 当需要Object时,包装类用于表示原始值。包装类广泛用于java.util包中的Collection类以及java.lang.reflect反射包中的类。 原始包装类及其相应的基元类型是:


原始类型 - >包装类 - >构造函数参数

  1. byte - >字节 - >字节或字符串
  2. 短 - >简短 - >短或字符串
  3. int - >整数 - > int或String
  4. long - >长 - > long或String
  5. float - >浮动 - > float,double或String
  6. double - >双 - > double或String
  7. char - >角色 - > char
  8. 布尔值 - >布尔 - >布尔值或字符串

  9. Byte,Short,Integer,Long,Float和Double包装类都是Number类的子类。 包装类BigDecimal和BigInteger不是原始包装类之一,并且是可变的。

    另见this

    因此总的来说,对象(Character)可以在Java中分配null值但是primitive(char)不能,因为它们表示内存中具有on值的位置,但是primitive是对包含整个类的内存位置的引用

答案 5 :(得分:0)

public class CharacterDemo {

    private static char a;

    private static Character b;

    public static void main(String[] args) {
           //default value
        System.out.println(a);
        System.out.println(b);
    }
}

When you execute the above code 
Output:

null

In the first line it prints null character '\u0000'
but second line it prints null object