<br> <div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But is not the compiler allowed to replace the local variable h with the field hash, since this does not change intra-thread semantic?<br>

<br></blockquote><div>Imagine  val[off++] actually throws ArrayIndexOutOfBoundsExcepton, that would lead to incorrect result, i.e. hash would be initialized while it should have not been. Same w/ any other Error (like ThreadDeath).<br>
 <br></div><div>Stanimir<br><br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Am <a href="tel:26.08.2012%2012" value="+12608201212" target="_blank">26.08.2012 12</a>:27, schrieb Per Mildner:<div class="HOEnZb"><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
On Aug 20, 2012, at 7:58 PM, Zhong Yu <<a href="mailto:zhong.j.yu@gmail.com" target="_blank">zhong.j.yu@gmail.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
On Mon, Aug 20, 2012 at 6:49 AM, James <<a href="mailto:james@inaseq.com" target="_blank">james@inaseq.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I have a system that processes a lot of Doubles.  From time to time I need<br>
the accuracy of BigDecimal math but creating a BigDecimal is relatively<br>
expensive so I only do it when needed.  Hence I use lazy initialization as<br>
shown below.<br>
<br>
private Double price;  // although not final is effectively immutable and<br>
guaranteed non-null when used below<br>
private transient BigDecimal priceBD;<br>
<br>
public BigDecimal getPriceBD() {<br>
if (priceBD == null) {<br>
priceBD = BigDecimal.valueOf(price);  // strict singleton semantics not<br>
required<br>
}<br>
return priceBD;<br>
}<br>
</blockquote>
You may have omitted it for brevity, but a local variable is necessary<br>
here for correctness. See String.hashCode()<br>
</blockquote>
Where, and why, would a local variable help?<br>
<br>
Also, I do not see how this relates to String.hashCode().<br>
<br>
What am I missing?<br>
<br>
For reference, String.java:<br>
{<br>
     ...<br>
     private int hash; // Default to 0<br>
     ...<br>
     public int hashCode() {<br>
         int h = hash;<br>
         if (h == 0 && count > 0) {<br>
             int off = offset;<br>
             char val[] = value;<br>
             int len = count;<br>
<br>
             for (int i = 0; i < len; i++) {<br>
                 h = 31*h + val[off++];<br>
             }<br>
             hash = h;<br>
         }<br>
         return h;<br>
     }<br>
   ...<br>
}<br>
<br>
Regards,<br>
<br>
Per Mildner<br>
<a href="mailto:Per.Mildner@sics.se" target="_blank">Per.Mildner@sics.se</a><br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.<u></u>oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/<u></u>listinfo/concurrency-interest</a><br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.<u></u>oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/<u></u>listinfo/concurrency-interest</a><br>
</div></div></blockquote></div><br>