📄 16.doc.html
字号:
</ul><a name="45766"></a>
<h3>16.1.7 The Boolean Operator <code>|</code></h3>
<ul><a name="45767"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>|</code> <i>b</i> when true iff at least one of the following is true:
<ul>
<a name="26085"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>. (Note that if <i>V</i><i></i> is definitely assigned after <i>a</i>, it follows that <i>V</i><i></i> is definitely assigned after <i>b</i>.)
<a name="26086"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when true and <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
</ul>
<a name="26087"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>|</code> <i>b</i> when false iff <i>V</i><i></i> is definitely assigned after <i>a</i> when false or <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
<a name="26088"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before <i>a</i> <code>|</code> <i>b</i>.
<a name="26089"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i>.
</ul><a name="26091"></a>
<h3>16.1.8 The Boolean Operator <code>^</code></h3>
<ul><a name="26092"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>^</code> <i>b</i> when true iff at least one of the following is true:
<ul>
<a name="26093"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26094"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when true and <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
<a name="26095"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when false and <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
</ul>
<a name="26096"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>^</code> <i>b</i> when false iff at least one of the following is true:
<ul>
<a name="26097"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26098"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when true and <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
<a name="26099"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when false and <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
</ul>
<a name="26100"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before <i>a</i> <code>^</code> <i>b</i>.
<a name="26101"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i>.
</ul><a name="26102"></a>
<h3>16.1.9 The Boolean Operator <code>==</code></h3>
<ul><a name="26103"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>==</code> <i>b</i> when true iff at least one of the following is true:
<ul>
<a name="26104"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26105"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when true and <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
<a name="26106"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when false and <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
</ul>
<a name="26107"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>==</code> <i>b</i> when false iff at least one of the following is true:
<ul>
<a name="26108"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26109"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when true and <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
<a name="26110"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> when false and <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
</ul>
<a name="26111"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before <i>a</i> <code>==</code> <i>b</i>.
<a name="26112"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i>.
</ul><a name="26113"></a>
<h3>16.1.10 The Boolean Operator <code>!=</code></h3>
<a name="26117"></a>
The rules for <i>a</i> <code>!=</code> <i>b</i> are identical to the rules for <i>a</i> <code>^</code> <i>b</i> <a href="16.doc.html#26091">(§16.1.8)</a>.
<p><a name="26118"></a>
<h3>16.1.11 The Boolean Operator <code>? :</code></h3>
<a name="26119"></a>
Suppose that <i>b</i> and <i>c</i> are boolean-valued expressions.
<p><ul><a name="26120"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>?</code> <i>b</i> <code>:</code> <i>c </i>when true iff both of the following are true:
<ul>
<a name="26121"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b</i> or <i>V</i><i></i> is definitely assigned after <i>b</i> when true.
<a name="26122"></a>
<li><i>V</i><i></i> is definitely assigned before <i>c</i> or <i>V</i><i></i> is definitely assigned after <i>c</i> when true.
</ul>
<a name="26123"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>?</code> <i>b</i> <code>:</code> <i>c </i>when false iff both of the following are true:
<ul>
<a name="26124"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b</i> or <i>V</i><i></i> is definitely assigned after <i>b</i> when false.
<a name="26125"></a>
<li><i>V</i><i></i> is definitely assigned before <i>c</i> or <i>V</i><i></i> is definitely assigned after <i>c</i> when false.
</ul>
<a name="26126"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before <i>a</i> <code>?</code> <i>b</i> <code>:</code> <i>c</i>.
<a name="26127"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i> when true.
<a name="26128"></a>
<li><i>V</i><i></i> is definitely assigned before <i>c </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i> when false.
</ul><a name="26129"></a>
<h3>16.1.12 The Conditional Operator <code>? :</code></h3>
<a name="26130"></a>
Suppose that <i>b</i> and <i>c</i> are expressions that are not boolean-valued.
<p><ul><a name="26131"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>?</code> <i>b</i> <code>:</code> <i>c </i>iff both of the following are true:
<ul>
<a name="26132"></a>
<li><i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26133"></a>
<li><i>V</i><i></i> is definitely assigned after <i>c</i>.
</ul>
<a name="26134"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before <i>a</i> <code>?</code> <i>b</i> <code>:</code> <i>c</i>.
<a name="26135"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i> when true.
<a name="26136"></a>
<li><i>V</i><i></i> is definitely assigned before <i>c </i>iff <i>V</i><i></i> is definitely assigned after <i>a</i> when false.
</ul><a name="26137"></a>
<h3>16.1.13 Boolean Assignment Expressions</h3>
<a name="26138"></a>
Suppose that an assignment expression <i>a</i> <code>=</code> <i>b</i>, <i>a</i> <code>&=</code> <i>b</i>, <i>a</i> <code>|=</code> <i>b</i>, or <i>a</i> <code>^=</code> <i>b</i> is boolean-
valued.
<p><ul><a name="26139"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before the assignment expression.
<a name="26140"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b</i> iff <i>V</i><i></i> is definitely assigned after <i>a</i>.
<a name="26141"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>=</code> <i>b</i> when true iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> is definitely assigned after the right-hand operand expression when true.
<a name="26142"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>=</code> <i>b</i> when false iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> is definitely assigned after the right-hand operand expression when false.
<a name="26143"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>&=</code> <i>b</i> when true iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>&</code> <i>b</i> (in the same context) when true.
<a name="26144"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>&=</code> <i>b</i> when false iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>&</code> <i>b</i> (in the same context) when false.
<a name="26145"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>|=</code> <i>b</i> when true iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>|</code> <i>b</i> (in the same context) when true.
<a name="26146"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>|=</code> <i>b</i> when false iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>|</code> <i>b</i> (in the same context) when false.
<a name="26147"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>^=</code> <i>b</i> when true iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>^</code> <i>b</i> (in the same context) when true.
<a name="26148"></a>
<li><i>V</i><i></i> is definitely assigned after <i>a</i> <code>^=</code> <i>b</i> when false iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> would be definitely assigned after <i>a</i> <code>^</code> <i>b</i> (in the same context) when false.
</ul><a name="29564"></a>
Note that if <i>a</i> is <i>V</i><i></i> and <i>V</i><i></i> is not definitely assigned before a compound assignment such as <i>a</i> <code>&=</code> <i>b</i>, then a compile-time error will necessarily occur. The rules stated above include the disjunct "<i>a</i> is <i>V</i><i></i>" so that <i>V</i><i></i> will be considered to have been definitely assigned at later points in the code. Including the disjunct "<i>a</i> is <i>V</i><i></i>" does not affect the binary decision as to whether a program is acceptable or will result in a compile-time error, but it affects <i>how many</i> different points in the code may be regarded as erroneous, and so in practice it can improve the quality of error reporting.<p>
<a name="26150"></a>
<h3>16.1.14 Other Assignment Expressions</h3>
<a name="26151"></a>
Suppose that an assignment expression <i>a</i> <code>=</code> <i>b</i>, <i>a</i> <code>+=</code> <i>b</i>, <i>a</i> <code>-=</code> <i>b</i>, <i>a</i> <code>*=</code> <i>b</i>, <i>a</i> <code>/=</code> <i>b</i>, <i>a</i> <code>%=</code> <i>b</i>,
<i>a</i> <code><<=</code> <i>b</i>, <i>a</i> <code>>>=</code> <i>b</i>, <i>a</i> <code>>>>=</code> <i>b</i>, <i>a</i> <code>&=</code> <i>b</i>, <i>a</i> <code>|=</code> <i>b</i>, or <i>a</i> <code>^=</code> <i>b</i> is not boolean-valued.
<p><ul><a name="26152"></a>
<li><i>V</i><i></i> is definitely assigned after the assignment expression iff either <i>a</i> is <i>V</i><i></i> or <i>V</i><i></i> is definitely assigned after <i>b</i>.
<a name="26153"></a>
<li><i>V</i><i></i> is definitely assigned before <i>a</i> iff <i>V</i><i></i> is definitely assigned before the assignment expression.
<a name="26154"></a>
<li><i>V</i><i></i> is definitely assigned before <i>b</i> iff <i>V</i><i></i> is definitely assigned after <i>a</i>.
</ul><a name="26155"></a>
<h3>16.1.15 Operators <code>++</code> and <code>--</code></h3>
<ul><a name="26156"></a>
<li><i>V</i><i></i> is definitely assigned after a preincrement, predecrement, postincrement, or postdecrement expression iff either the operand expression is <i>V</i><i></i> or <i>V</i><i></i> is definitely assigned after the operand expression.
<a name="26157"></a>
<li><i>V</i><i></i> is definitely assigned before the operand expression iff <i>V</i><i></i> is definitely assigned before the preincrement, predecrement, postincrement, or postdecrement expression.
</ul><a name="26158"></a>
<h3>16.1.16 Other Expressions</h3>
<a name="26159"></a>
If an expression is not boolean-valued and is not a conditional-operator expression
or assignment expression, the following rules apply:
<p><ul><a name="26160"></a>
<li>If the expression has no subexpressions, <i>V</i><i></i> is definitely assigned after the expression iff <i>V</i><i></i> is definitely assigned before the expression. This case applies to literals, simple names, <code>this</code>, <code>super</code>, and <code>null</code>.
<a name="26161"></a>
<li>If the expression has subexpressions, <i>V</i><i></i> is definitely assigned after the expression iff <i>V</i><i></i> is definitely assigned after its rightmost immediate subexpression.
</ul><a name="26162"></a>
For any immediate subexpression <i>y</i> of an expression <i>x</i>, <i>V</i><i></i> is definitely assigned
before <i>y</i> iff <i>V</i><i></i> is definitely assigned before <i>x</i> or one of the following situations is
true:
<p><ul><a name="26163"></a>
<li><i>y</i> is the right-hand operand of a binary operator and <i>V</i><i></i> is definitely assigned after the left-hand operand.
<a name="26164"></a>
<li><i>x</i> is an array reference, <i>y</i> is the subexpression within the brackets, and <i>V</i><i></i> is definitely assigned after the subexpression before the brackets.
<a name="26165"></a>
<li><i>x</i> is a method invocation expression for an object; <i>y</i> is the first argument expression in the method invocation expression; there is a subexpression whose value is an object to the left of the dot, method name, and left parenthesis of the method invocation expression; and <i>V</i><i></i> is definitely assigned after this subexpression.
<a name="26166"></a>
<li><i>x</i> is a method invocation expression or class instance creation expression; <i>y</i> is an argument expression, but not the first; and <i>V</i><i></i> is definitely assigned after the argument expression to the left of <i>y</i>.
<a name="26167"></a>
<li><i>x</i> is an class instance creation expression; <i>y</i> is a dimension expression, but not the first; and <i>V</i><i></i> is definitely assigned after the dimension expression to the left of <i>y</i>.
</ul><a name="44017"></a>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -