仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 510|回复: 10
打印 上一主题 下一主题

[学习教程] 了解下JAVA的Java JDK之当心利用boxing

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前些天,在CSDN上看到了一个消息,说是ASP.NETAJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。
主动装箱与拆箱的功效现实上是编译器来帮您的忙,编译器在编译时代依您所编写的语法,决意是不是举行装箱或拆箱举措。比方:Integeri=100;
相称于编译器主动为您作以下的语法编译:Integeri=newInteger(100);
以是主动装箱与拆箱的功效是所谓的“编译器蜜糖”(CompilerSugar),固然利用这个功效很便利,但在程序运转阶段您得懂得Java的语义。比方上面的程序是能够经由过程编译的:
Integeri=null;
intj=i;
如许的语法在编译时代是正当的,可是在运转时代会有毛病,由于这类写法相称于:
Integeri=null;
intj=i.intValue();
null暗示i没有参考至任何的对象实体,它能够正当地指定给对象参考称号。因为实践上i并没有参考至任何的对象,以是也就不成能操纵intValue()办法,如许下面的写法在运转时会呈现NullPointerException毛病。
主动装箱、拆箱的功效供应了便利性,但埋没了一些细节,以是必需当心。再来看典范4.6,您以为了局是甚么呢?
典范4.6 AutoBoxDemo2.java
publicclassAutoBoxDemo2{
    publicstaticvoidmain(String[]args){
      Integeri1=100;
      Integeri2=100;
      if(i1==i2)
        .out.println("i1==i2");
      else
        .out.println("i1!=i2");
    }
}
从主动装箱与拆箱的机制来看,大概会以为了局是显现i1==i2,您是对的。那末典范4.7的这个程序,您以为了局是甚么?
典范4.7 AutoBoxDemo3.java
publicclassAutoBoxDemo3{
    publicstaticvoidmain(String[]args){
      Integeri1=200;
      Integeri2=200;
      if(i1==i2)
        .out.println("i1==i2");
      else
        .out.println("i1!=i2");
    }
}
了局是显现i1!=i2,这有些使人惊奇,两个典范语法完整一样,只不外改个数值罢了,了局却相反。
实在这与==运算符的对照有关,在第3章中先容过==是用来对照两个基础数据范例的变量值是不是相称,现实上==也用于判别两个对象援用称号是不是参考至统一个对象。
在主动装箱时关于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,以是典范4.6中利用==举行对照时,i1与i2实践上参考至统一个对象。假如凌驾了从–128到127之间的值,被装箱后的Integer对象其实不会被重用,即相称于每次装箱时都新建一个Integer对象,以是典范4.7利用==举行对照时,i1与i2参考的是分歧的对象。
以是不要太过依附主动装箱与拆箱,您仍是必需晓得基础数据范例与对象的差别。典范4.7最好仍是依正轨的体例来写,而不是依附编译器蜜糖(CompilerSugar)。比方典范4.7必需改写为典范4.8才是准确的。
典范4.8 AutoBoxDemo4.java
publicclassAutoBoxDemo4{
    publicstaticvoidmain(String[]args){
      Integeri1=200;
      Integeri2=200;
      if(i1.equals(i2))
        .out.println("i1==i2");
      else
        .out.println("i1!=i2");
    }
}
了局此次是显现i1==i2。利用如许的写法,信任也会对照宁神一些,关于这些便利但埋没细节的功效究竟要不要用呢?基础上只要一个准绳:假如您不断定就不要用。
倡议老手不要利用主动装箱、拆箱的语法,在这里申明这个功效是为了要完全性先容JavaSE6的特征,老手进门的话,最幸亏对对象有较深切懂得以后,再来利用这个功效。

还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。
山那边是海 该用户已被删除
沙发
发表于 2015-1-18 12:53:51 | 只看该作者
如果要向javaweb方向发展也要吧看看《Javaweb从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
谁可相欹 该用户已被删除
板凳
发表于 2015-1-18 17:47:26 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
活着的死人 该用户已被删除
地板
发表于 2015-1-22 17:35:39 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
飘飘悠悠 该用户已被删除
5#
发表于 2015-1-27 13:14:57 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
乐观 该用户已被删除
6#
发表于 2015-2-5 05:22:21 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
分手快乐 该用户已被删除
7#
发表于 2015-2-11 02:55:12 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
若天明 该用户已被删除
8#
发表于 2015-3-1 19:52:11 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-10 22:45:18 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-17 12:07:21 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
飘灵儿 该用户已被删除
11#
发表于 2015-3-24 09:26:15 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 03:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表