知道String实现了CharSequence接口,那么为什么StringBuilder有一个CharSequence的构造函数和另一个String的构造函数?javadoc中没有指示!
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {...}
Run Code Online (Sandbox Code Playgroud)
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
...
/**
* Constructs a string builder initialized to the contents of the
* specified string. The initial capacity of the string builder is
* {@code 16} plus the length of the string argument.
*
* @param str the initial contents of the buffer.
*/
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
/**
* Constructs a string builder …Run Code Online (Sandbox Code Playgroud) 我测试的优先级&&,并||和我有令人困惑的例子.在Java中,&&运算符优先级高于运算符||.
所以,如果我们有这3个表达式:
//expr1 = true , expr2 = false; expr3 = false;
if(expr1 || expr2 && expr3);
Run Code Online (Sandbox Code Playgroud)
应评估为:
if(expr1 || (expr2 && expr3));
Run Code Online (Sandbox Code Playgroud)
所以expr2 && expr3应该在之前进行评估expr1.但是,这个例子:
int a1 = 10;
int a2 = 20;
System.out.println(a1 < a2 || ++a1 > a2 && ++a2 < a1);
System.out.println(a1);
System.out.println(a2);
Run Code Online (Sandbox Code Playgroud)
输出:
true
10
20
Run Code Online (Sandbox Code Playgroud)
这证明只有 a1 < a2被评估.你能解释为什么会这样吗?