java中的autoboxing和auto unboxing
java 5开始引入了autoboxing 和auto-unboxing机制,方便了基本类型和其对应的wrapper类型的转换。比如我们可以直接把一个基本类型的值赋给其wrapper类型,反之亦然;可以把一个基本类型直接放入容器里,封装的过程由编译器来完成;调用方法的时候可以直接匹配参数autoboxing和auto-unboxing之后的版本。
这个过程编译器也只是做了个简单的处理,通过wrapper class的valueOf()方法对基本类型进行包装,通过wrapper class 的"基本类型名称"+Value() 方法得到其基本类型。
比如
Integer i=5;
int ii=i;
编译器将其变换为:
Integer i=Integer.valueOf(5);
int ii=i.intValue();
对于其他基本类型是一致的,不过auto-unboxing使用的方法名要根据类型变换,比如boolean类型的Boolean.booleanValue(),byte的Byte.byteValue()等等。
autoboxing的时候为什么使用valueOf() 方法而不使用new 来创建呢?
看文档的解释:
Integer的valueOf()方法:因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
注意两点:
1.重点:缓存!(设计模式中的享元模式)
Boolean类型中直接缓存了两个Boolean对象,TRUE和FALSE,这样使用valueOf()方法时只需要直接返回这两个对象中的一个,而不是每次调用的时候都用new,这也就是文档里所说的通过缓存经常请求的值二显著提高空间和时间性能。
Byte,Integer 和Long都是缓存了-128~+127之间的对象,autoboxing的时候,如果需要boxing的值在此范围之内,则直接返回缓存的对象,没有的时候再去new.
Character因为类型的特殊性,保存的是0-127之间的对象。
举个实际的例子,这是Integer中的实现:
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
 
相关文档:
Java.lang.Thread
线程---程序的不同执行路径
主线程main方法 分支线程
线程的启动发法:
两个
1.
实现Runnalble接口实现RUN
New Thread(new Runnable).start
2.继承Thread实现RUN
New Thread().start
原理:
建议使用第一种方法
注意区分方法调用run与线程启动的不同start
  ......
今天本来想熟悉一下J2SE的内容,不想在编写过程中突然考虑到一个问题,JAVA算法的效率,大家先看我自己写的一个小例子:
public class NumSort {
public static void mian (String args[]) {
int a[] = new int[args.length];
for (int i=0;i<args.length;i++) {
......
一.用引用操纵对象
每种编程语言都有自己的数据操纵方式。有时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵对象,还是用某种基于特殊语法的间接表示(例如C和C++里的指针)在操纵对象?
所有的这一切在java里都得到了简化 ......
今天没有什么大事,想找java的资料就来到这里了!感觉还是Csdn的资料比较多。
最近换了工作,因为一些原因以前的工作。我以前是做C的,现在因为工作的需要却要做java。
现在大概看了一点java的东东,感觉java的用途很广,也很优秀。但是相比于C却缺少了一些透明度,但也可能正是因为这些透明
才使的它发展到现在吧。java ......
1.基本概念的理解
绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。
相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Ser ......