﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-blog.Toby-随笔分类-about java</title><link>http://www.blogjava.net/SIDNEY/category/6425.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:47:26 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:47:26 GMT</pubDate><ttl>60</ttl><item><title>think in java 读书笔记</title><link>http://www.blogjava.net/SIDNEY/archive/2005/12/28/25773.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Wed, 28 Dec 2005 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2005/12/28/25773.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/25773.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2005/12/28/25773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/25773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/25773.html</trackback:ping><description><![CDATA[<STRONG>第3 章控制程序流程<BR></STRONG><BR>对一个对象进行操作时，我们真正操作的是它的句柄。所<BR>以倘若“从一个对象到另一个对象”赋值，实际就是将句柄从一个地方复制到另一个地方。这意味着假若为<BR>对象使用“C=D”，那么C 和D 最终都会指向最初只有D 才指向的那个对象。下面这个例子将向大家阐示这一点。<BR>// Assignment with objects is a bit tricky<BR>package c03;<BR>class Number {<BR>int i;<BR>}<BR>public class Assignment {<BR>public static void main(String[] args) {<BR>Number n1 = new Number();<BR>Number n2 = new Number();<BR>n1.i = 9;<BR>n2.i = 47;<BR>System.out.println("1: n1.i: " + n1.i +<BR>", n2.i: " + n2.i);<BR>n1 = n2;<BR>System.out.println("2: n1.i: " + n1.i +<BR>", n2.i: " + n2.i);<BR>n1.i = 27;<BR>System.out.println("3: n1.i: " + n1.i +<BR>", n2.i: " + n2.i);<BR>}<BR>} ///:~<BR>正确输出：<BR>1: n1.i: 9, n2.i: 47<BR>2: n1.i: 47, n2.i: 47<BR>3: n1.i: 27, n2.i: 27<BR>看来改变n1 的同时也改变了n2！这是由于无论n1 还是n2 都包含了相同的句柄，它指向相同的对象（最初<BR>的句柄位于n1 内部，指向容纳了值9 的一个对象。在赋值过程中，那个句柄实际已经丢失；它的对象会由<BR>“垃圾收集器”自动清除）。<BR><STRONG>检查对象是否相等</STRONG><BR>public class Equivalence {<BR>public static void main(String[] args) {<BR>Integer n1 = new Integer(47);<BR>Integer n2 = new Integer(47);<BR>System.out.println(n1 == n2);<BR>System.out.println(n1 != n2);<BR>}<BR>} ///:~<BR>其中，表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定<BR>先是true，再是false，因为两个Integer 对象都是相同的。但尽管对象的内容相同，句柄却是不同的，而<BR>==和!=比较的正好就是对象句柄。所以输出结果实际上先是false，再是true。这自然会使第一次接触的人<BR>感到惊奇。<BR>若想对比两个对象的实际内容是否相同，又该如何操作呢？此时，必须使用所有对象都适用的特殊方法<BR>equals()。但这个方法不适用于“主类型”，那些类型直接使用==和!=即可。<BR><BR>在任何循环语句的主体部分，亦可用break 和continue 控制循环的流程。其中，break 用于强行退出循环，<BR>不执行循环中剩余的语句。而continue 则停止执行当前的反复，然后退回循环起始和，开始新的反复。<BR><BR>同样的规则亦适用于while：<BR>(1) 简单的一个continue 会退回最内层循环的开头（顶部），并继续执行。<BR>(2) 带有标签的continue 会到达标签的位置，并重新进入紧接在那个标签后面的循环。<BR>(3) break 会中断当前循环，并移离当前标签的末尾。<BR>(4) 带标签的break 会中断当前循环，并移离由那个标签指示的循环的末尾。<BR>这个方法的输出结果是一目了然的：<img src ="http://www.blogjava.net/SIDNEY/aggbug/25773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2005-12-28 19:33 <a href="http://www.blogjava.net/SIDNEY/archive/2005/12/28/25773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>