Java整数是否等于字符?

时间:2013-10-09 00:58:24

标签: java

如果这个问题有点过分,我很抱歉,但我有点疑惑为什么我的教授做了以下陈述:

请注意,read()返回一个整数值。使用int作为返回类型允许read()使用-1来表示它已到达流的末尾。 你会从你对Java的介绍中回想一下,int等于一个使用-1方便的char。

教授正在引用以下示例代码:

public class CopyBytes {
   public static void main(String[] args) throws IOException {

    FileInputStream in = null;
    FileOutputStream out = null;

    try {
        in = new FileInputStream("Independence.txt");
        out = new FileOutputStream("Independence.txt");
        int c;

        while ((c = in.read()) != -1) {
            out.write(c);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (out != null) {
            out.close();
        }
    }
 }
}

这是一门高级Java课程,所以很明显我在这之前已经学过一些入门课程。也许我只是有一个“金发时刻”的各种各样,但我不理解在进行比较时整数可能等于一个字符。实例方法read()在EOF时返回一个整数值。我完全理解。

任何人都可以用粗体来阐明声明吗?

6 个答案:

答案 0 :(得分:5)

在Java中,chars是一种更具体的int类型。我可以写。

char c = 65;

此代码打印出“A”。我需要在那里进行转换,因此Java知道我想要字符表示而不是整数。

public static void main(String... str) {
    System.out.println((char) 65);
}

您可以在ASCII table.

中查找int到字符映射

根据你的老师,int允许更多的价值观。由于-1不是字符值,因此它可以作为标志值。

答案 1 :(得分:1)

对于计算机,角色只是一个数字(可能在某些时候被映射到一个字母的图片以显示给用户)。语言通常有一个特殊的字符类型来区分“只是一个数字”和“一个引用一个字符的数字”,但在内部,它仍然只是某种整数。

read()返回int的原因是要有“一个额外的值”来表示EOF。 char的所有值都已定义为其他值,因此它使用更大的类型来获取更多值。

答案 2 :(得分:1)

这意味着你的教授花了太多时间用C编程。read {和InputStream FileInputStream的定义是:

  

从输入流中读取下一个数据字节。值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1。

(见http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()

另一方面,Java中的char表示Unicode字符,并被视为0到65535范围内的整数。(在C中,char是8位积分值,0到255或-128到127。)

请注意,在Java中,byte实际上是-128到127范围内的整数;但是read的定义已被指定为避免该问题,通过判断它无论如何都会返回0到255。 javadoc在这里松散地使用“byte”。

答案 3 :(得分:1)

Java中的char数据类型是一个16位Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535(含))。

Java中的int数据类型是32位带符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)。

由于char 不能为负(0到65,535之间的数字)且int 为负数,因此从方法返回的可能值为-1(表示没有留下任何东西)到65,535(一个字符的最大值)。

答案 4 :(得分:0)

你的教授所指的是字符只是在特殊环境中使用的整数。如果我们忽略Unicode和其他编码类型并专注于旧时的ASCII,那么就有一个ASCII表(http://www.asciitable.com/)。一串字符实际上只是一个整数序列,例如,TUV将是84,接着是85,接着是86。

'char'类型是JVM内部的一个整数,或多或少是一个提示,即该整数只应在字符上下文中使用。

你甚至可以在它们之间施放。

char a = (char) 65;
int i = (int) 'A';

这两个变量在内存中保存相同的数据,但编译器和JVM对它们的处理方式略有不同。

因此,read()返回一个整数而不是char,以便允许-1,这不是有效的字符代码。 -1以外的值可以强制转换为char,而-1表示EOF。

当然,Unicode会使用多字节字符和代码点来改变所有这些。我会把它作为练习留给你。

答案 5 :(得分:0)

我不确定教授的意思是什么,但这一切归结为计算机只能理解1和0我们不理解1和0所有我们将使用代码系统首先使用Morris代码然后ascii现在utf -16 ......从计算机到计算机的不同,数字(int)是多么准确。你知道在现实世界中int是infinate它们只是保持count.char也有一个size.in utf _16让我们说它是16位(我会让你读到这一点)所以如果char和int都取16位,因为教授说它们是相同的(大小)并且读取1个字符与1int相同。顺便说一下,政治上正确的char也是无限的。中文字符法语字符和我刚刚编写的字符但不能发布导致它不受支持。所以想到int和char的代码系统。 -1 int是eof char。(eof =文件结尾)祝你好运,我希望这有所帮助。我不明白是在读取和写入同一个文件?