有人可以描述此代码中发生的过程吗(逐行)?

时间:2019-02-13 10:32:48

标签: java character literals

class Example{
public static void main(String args[]){
char a='a';
System.out.println(a=='\u0061');
System.out.println(\u0061=='\u0061');
System.out.println(\u0061==97);
\u0061='\u0041';
System.out.println('A'=='\u0041');
System.out.println(65=='\u0041');
System.out.println(65==a);
System.out.println('\u0041'==a);        
}
}

输出:true * 7

我听不懂这段代码。请帮助

2 个答案:

答案 0 :(得分:1)

根据Java Language Specification

  

\ uxxxx格式的Unicode转义符,其中xxxx是十六进制值,表示编码为xxxx的UTF-16代码单元。

字符'a'的unicode值为97(十六进制为61),'A'的unicode值为65(十六进制为41)。因此,源中的字符\u0061被读为a,字符\u0041被读为A

您的代码读取为:

class Example{
    public static void main(String args[]){
        char a='a';
        System.out.println(a=='a');
        System.out.println(a=='a');
        System.out.println(a==97);
        a='A';
        System.out.println('A'=='A');
        System.out.println(65=='A');
        System.out.println(65==a);
        System.out.println('A'==a);        
    }
}

答案 1 :(得分:-1)

  1. char a='a';-变量a存储小写字符
  2. System.out.println(a=='\u0061');-以UTF小写表示的字符表示为\u0061
  3. System.out.println(\u0061=='\u0061');-\u0061的值未加引号,因此它是decoded into lowercase a during compilation使其a=='\u0061',实际上与第2点相同。
  4. System.out.println(\u0061==97);-与上面相同,因为97dec = 61hex,只是在这里我们不使用UTF表示法来表示字符,而是使用数值char
  5. \u0061='\u0041';-a的变量\u0041的变量值是大写的A
  6. System.out.println('A'=='\u0041');-与第2点相同
  7. System.out.println(65=='\u0041');-65dec = 41hex,与第4点相同,但是这里我们比较的是两个常量,而不是a变量。
  8. System.out.println(65==a);-见上文
  9. System.out.println('\u0041'==a);-参见上文