我正在刷新我的Java知识,我正在使用一个函数,我使用返回类型char
设置,然后我在函数中有一个return null
语句,但Eclipse开始抱怨。只要我将char
的返回类型替换为Character
,它就会开始工作。
我理解Character是原始类型char的包装类,因此我可以理解Character类如何能够接受null并返回该“null对象”,而原始char无法表示null。但我不知道这个猜想是否属实,如果是真的,我想知道是否有人可以启发我的细节或指出我正确的方向。
答案 0 :(得分:10)
答案 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)
Character
是Object
,因此null
是允许的。原始类型char
被分配了默认值。
Character
是Object
,因此它由参考组成
变量和一个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反射包中的类。 原始包装类及其相应的基元类型是:
原始类型 - >包装类 - >构造函数参数
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