楼主: omencathay

[精华] Think in java读书笔记

[复制链接]
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
221#
发表于 2004-12-4 17:57 | 只看该作者
今天为了项目,公司集体加班
晚上再看

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
222#
发表于 2004-12-5 16:40 | 只看该作者
Promotion
You`ll discover that if you perform any mathematical or bitwise operation on primitive data types that are smaller than an int (that is,char,byte,or short),those values will be promoted to int before performing the operations,and the resulting value will be of type int.So if you want to assign back intothe smaller type,you must use a cast.(And,since you`re assinging back into a smaller type,you might be losing information.)

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
223#
发表于 2004-12-5 16:45 | 只看该作者
由上面可以知道,如果你写了类似下面的代码
short s1=3;
short s2=5;
short s3=s1+s2;
是不能通过编译的。而必须casting:short s3=(short)(s1+s2);

偶以前一直以为这样写是可以的
由此看来short类型几乎无用武之地了,范围小,计算速度也不比int快

使用道具 举报

回复
论坛徽章:
59
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-10-28 14:15:35管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
224#
发表于 2004-12-5 22:37 | 只看该作者
最初由 臧圩人 发布
[B]由上面可以知道,如果你写了类似下面的代码

由此看来short类型几乎无用武之地了,范围小,计算速度也不比int快 [/B]


那到不一定, 在做大型的数组操作时, 能用小类型就绝对不用大类型

使用道具 举报

回复
论坛徽章:
59
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-10-28 14:15:35管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
225#
发表于 2004-12-5 23:03 | 只看该作者
最初由 田小鱼 发布
[B]

我觉得这个说的有点问题,其实在Object中实现的equals方法,其作用同==完全一样,但是在String类中对equals方法做了覆盖,这些从jdk的lib源码中都能看出来,其实我感觉java就是值比较和值传递,不存在地址比较和地址传递 [/B]


恩, equals用于Object的比较, 而==则用于变量的数值比较, 二者有根本的不同, 所以==不能用于对象的比较而只能用于PRIMITIVE变量的数值比较, 如果一定要用它比较对象的话, 就变成了地址的比较, 这种比较在JAVA中是没有意义的, 另外, JAVA也并不是单纯的传值, 当然说它是传地址也是不确切的, 实际上JAVA传递的是参照.
比如说

Some someA=someB;
someB.propertyA=1;
则someA.propertyA也会变成1
这就说明, 两个变量是同一个对象的参照

String 这个类比较特别, 它没有定义向属性赋值的方法
它只有重建参照才能赋值;
String stringA="java";
String stringB=stringA;

这时候, stringB的参照指向的对象stringA, 而stringA则指向了"java"

如果改变stringA
stringA="new";
这时候,  stringB仍然通过原先的对象参照指向"java"
而stringA则不再是原先的参照, 它实际上改变了数值成了一个新的参照指向"new".

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
226#
发表于 2004-12-5 23:21 | 只看该作者
今天遇到了下面这段代码,看不大清楚。请问他是一个怎么样的排序方法?特别是i和j,不理解他们的功能
(当然还有一个swap方法,我没有写出来:),
private void quickSort(int left, int right) {
    if(right > left) {
      Object o1 = elementAt(right);
      int i = left - 1;
      int j = right;
      while(true) {
        while(compare.lessThan(
              elementAt(++i), o1))
          ;
        while(j > 0)
          if(compare.lessThanOrEqual(
             elementAt(--j), o1))
            break; // out of while
        if(i >= j) break;
        swap(i, j);
      }
      swap(i , right);
      quickSort(left, i-1);
      quickSort(i+1, right);
    }
  }

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
227#
发表于 2004-12-6 09:14 | 只看该作者
最初由 lodge 发布
[B]

那到不一定, 在做大型的数组操作时, 能用小类型就绝对不用大类型 [/B]

不知java为什么要这样实现short和byte的运算
有什么深层的原因吗?

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
228#
发表于 2004-12-6 09:22 | 只看该作者

读书小记:

You can define multiple variables within a for statement,but they must be the same type:
for(int i=0,j=1;i<10&&j!=11;i++,j++)
//body of for loop

A second form of infiniteloop is for(;; ).The compiler treats both while(true) and for(;; ) in the same way,so whichever one you use is a matter of programming taste.

使用道具 举报

回复
论坛徽章:
59
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-10-28 14:15:35管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
229#
发表于 2004-12-6 09:59 | 只看该作者
最初由 臧圩人 发布
[B]
不知java为什么要这样实现short和byte的运算
有什么深层的原因吗? [/B]


没啥分配内存的需要而已
小类型向大类型转换时不会出现内存溢出, 反过来就说不好了, JAVA的编译器很强, 一般不象C容易出现RUNTIME的内存溢出

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
230#
发表于 2004-12-6 10:26 | 只看该作者

break&continue

//: 03:LabeledFor.java
//Java`s "labeled for" loop.
public class LabeledFor{
public static void main(String[] args){
int i=0;
outer://Can`t have statements here.
for(;true; ){
inner://Can`t have statements here.
for(;i<10;i++){
System.out.println("i="+i);
if(i==2){
System.out.println("continue";
continue;
}
if(i==3){
System.out.println("break";
i++;//Otherwise i never gets increamented.
break;
}
if(i==7){
System.out.println("continue outer";
i++;//Otherwise i never gets increamented.
continue outer;
}
if(i==8){
System.out.println("break outer";
break outer;
}
for(int k=0;k<5;k++){
if(k=3){
System.out.println("continue inner";
continue inner;
}
}
}
}
}
}///:~

Note that break breaks out of the for loop,and that the increment-expression doesn`t occur until the end of the pass through the for loop.Since break skips the increment expression,the increment is performed directlyin the case of i==3.The continue outer statement in the case of i==7 also goes to the top of the lop and also skips the increment,so it too is incremented directly.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表