当前位置: 首页 > 知识库问答 >
问题:

char和int数组差异

水渊
2023-03-14

当我试图打印未初始化的静态字符数组时,它会给出运行时错误(Null指针异常),而未初始化的静态int数组会给出Null值。为什么?

public class abc {
    static int arr[];
    static char ch[];

    public static void main(String[] args) {
        System.out.println(ch); //it gives null pointer exception at run time
        System.out.println(arr); //it gives output as "null".
        }
    }

共有3个答案

祁通
2023-03-14

这是两种不同的方法,它们的API完全描述了行为。

public void println(对象x)调用字符串。valueOf,如果x为null,则返回“null”。

见:

  • http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#valueOf-java.lang.Object-
  • http://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#println-java.lang.Object-

public void print(char[]c)调用print(char[]c)方法,如果c为null,该方法将抛出NullPointerException。

见:

  • http://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#println-char:A-
常自怡
2023-03-14

答案存在于PrintWriter源代码中(例如System.out)。

首先,未初始化的数组作为参考变量,默认值为null

println(char[])(最终)尝试调用。传入数组上的长度。它为null,导致NullPointerExceptionprintln(char[])(最终)调用write(char[])

public void write(char buf[]) {
    write(buf, 0, buf.length);
}

没有超负荷的println匹配int[],但有一个println(对象)。在那里,它(最终)尝试String。valueOf,传递null引用,因此字符串。valueOf获取null并返回字符串“null”println(对象)调用print(对象)

public void print(Object obj) {
    write(String.valueOf(obj));
}

高迪
2023-03-14

系统。outPrintStream的一个实例,这个类有几个重载的println方法。就你而言:

  1. 系统。出来println(ch)正在使用公共void println(char x[])

第二种方法是使用

String.valueOf(x);

要获取我们要打印的对象的字符串表示形式,value eOf方法的代码看起来像

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

所以它是null安全的(如果引用持有null,将返回字符串"null")。

第一种方法是在某种程度上使用

public void write(char cbuf[]) throws IOException {
    write(cbuf, 0, cbuf.length);
                 //    ^^^^^^^ this throws NPE
}

因为cbufnullcbuf.length将抛出NullPointerExctive,因为null没有长度(或任何其他)字段。

 类似资料:
  • 问题内容: 我正在尝试将字符串转换为整数数组,以便随后可以对它们执行数学运算。我在以下代码方面遇到麻烦: 这给了我一个“无法转换的类型”错误,要求:int []发现:char我还尝试了其他一些方法,例如Character.getNumericValue,并且直接对其进行了直接分配,而没有进行任何修改。在那种情况下,无论我使用哪种转换方法或(!)字符串的实际值是什么,它总是输出相同的垃圾“ [I @

  • 是否可以将 ?如果是这样 - ? 我目前正在做一个项目,我需要<code>创建一个包含<code>字母表的字符数组。我当前的创建了一个(应该将

  • 我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该

  • 问题内容: 据我了解,字符是单个字符,即字母, 数字 ,标点符号,制表符,空格或类似内容。因此,当我这样做时: 输出1正是我所期望的。那为什么当我这样做时: 我最终的输出是 50 吗? 问题答案: 之所以得到它,是因为它添加了char 的ASCII值。您必须先将其转换为int。

  • 刚从C开始,我想知道是否有人能解释一些事情。 我相信你可以用下面的方法初始化一个字符数组 这将创建一个字符数组,其值为。 但如果我真的创造了这个: 会创建一个数组,以及指向该数组的指针吗? 例如:将指向内存中的第一个元素,以及数组中的其他元素?

  • 描述 (Description) C库函数int putchar(int char)将参数char指定的字符(unsigned char)写入stdout。 声明 (Declaration) 以下是putchar()函数的声明。 int putchar(int char) 参数 (Parameters) char - 这是要写的字符。 这是作为int推广传递的。 返回值 (Return Valu