编译后的Java字符
刚刚了解了.class文件的这种行为 假设我有这个代码:编译后的Java字符,java,io,Java,Io,刚刚了解了.class文件的这种行为 假设我有这个代码: public class Demo { public static void main(String...args) { char ch = 'A'; } } import java.io.PrintStream; public class Demo { public Demo() { } public static transient void main(S
public class Demo
{
public static void main(String...args)
{
char ch = 'A';
}
}
import java.io.PrintStream;
public class Demo
{
public Demo()
{
}
public static transient void main(String args[])
{
char c = 'A';
System.out.println(c);
}
}
如果我编译文件并使用cavaj反编译器打开.class文件,它会显示如下内容:
public class Demo
{
public Demo()
{
}
public static transient void main(String args[])
{
byte byte0 = 65;
}
}
这里,char被写为byte。但如果我打印这个字符并编写如下代码:
public class Demo
{
public static void main(String...args)
{
char ch = 'A';
System.out.println(ch);
}
}
反编译后,我得到以下代码:
public class Demo
{
public static void main(String...args)
{
char ch = 'A';
}
}
import java.io.PrintStream;
public class Demo
{
public Demo()
{
}
public static transient void main(String args[])
{
char c = 'A';
System.out.println(c);
}
}
我想知道两件事。首先,为什么编译器已显式导入PrintStream类。其次,为什么“char”被写为“char”,而不是像前面的例子中那样写为“byte”,或者打印字符如何改变行为
提前感谢:嗯,编译器不编写导入语句。编译器显式导入PrintStream类的原因是什么?导入是一个仅源代码的概念。我的意思是,为什么这个语句在反编译时可见?这是反编译器的问题,而不是编译器的问题。它可能注意到您正在调用PrintStream上的一个方法,该方法的类型为System.out.ok。我很清楚这个原因。但是“char”“byte”这个词呢?说到底,听起来你真的只是对反编译器的功能感兴趣。使用javap-c查看字节码是什么。