我有一个关于Java中的字符串的简单问题.以下简单代码段仅连接两个字符串,然后将它们与之进行比较==.
String str1="str";
String str2="ing";
String concat=str1+str2;
System.out.println(concat=="string");
Run Code Online (Sandbox Code Playgroud)
比较表达式concat=="string"返回false那么明显(I明白之间的差值equals()和==).
当这两个字符串被声明时final,
final String str1="str";
final String str2="ing";
String concat=str1+str2;
System.out.println(concat=="string");
Run Code Online (Sandbox Code Playgroud)
比较表达式concat=="string",在这种情况下返回true.为什么会final有所作为?它是否必须与实习生池做某事或我只是被误导?
在Java中,允许以下内容:
char c = 'A' + 1;
Run Code Online (Sandbox Code Playgroud)
这里,c将保持值'B'.在上面,首先评估表达式.所以'A'被转换为65,整个表达式的计算结果为66,然后66被转换为'B',因为我们将值存储在char中.
但是,以下内容会产生编译时错误:
char c = 'A';
c = c + 1;
Run Code Online (Sandbox Code Playgroud)
Java如何以不同方式查看表达式的解释是什么?顺便说一句,以下工作也很好:
char c = 'A';
c++;
Run Code Online (Sandbox Code Playgroud) public class Java{
public static void main(String[] args){
final byte x = 1;
final byte y = 2;
byte z = x + y;//ok
System.out.println(z);
byte a = 1;
byte b = 2;
byte c = a + b; //Compiler error
System.out.println(c);
}
}
Run Code Online (Sandbox Code Playgroud)
如果涉及任何int-sized或者更小的表达式的结果总是为int,即使两个字节的总和适合一个字节.
当我们添加两个适合字节的最终字节时,为什么会这样? 没有编译器错误.
促销的规则是"当操作数具有不同类型时,自动二进制数字促销发生,较小的操作数类型转换为较大的".但操作数是相同类型的,例如,
byte=byte+byte // Compile time error... found int..
Run Code Online (Sandbox Code Playgroud)
那为什么会这样呢?