Java总结(15) 加强for 装箱

来源:互联网 发布:会计课程 知乎 编辑:程序博客网 时间:2024/06/16 22:57


加强for

语法:
for ( type 变量名:集合变量名 )  { … } 
注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类。
举例: 
public static int add(int x,int ...args) {        int sum = x;        for(int arg:args) {                sum += arg;        }        return sum;}

加强for用法:

①:首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
②:ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
③:而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;/** * 增强for循环用法 *  */public class ForTest {        public static void main(String[] args) {                //List<Integer> list = new ArrayList<Integer>();                List<Integer> list = new LinkedList<Integer>();                for (int i = 0; i < 50000; i++) {                        list.add(11);                }                    int resutl = 0;                long start = System.currentTimeMillis();                for (int i = 0; i < list.size(); i++) {                        resutl = list.get(i);                }                System.out.println("普通循环使用了"+ (System.currentTimeMillis() - start)+"毫秒");                start = System.currentTimeMillis();                for (int c2 : list) {                }                System.out.println("增强for循环使用了"+ (System.currentTimeMillis() - start)+"毫秒");        } } 

自动装箱:

概述:

JAVA JDK1.5提供了自动装箱(Autoboxing)与自动拆箱(AutoUnboxing)功能,所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量;自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量。
如下例:
public class AutoBoxingUnboxing{        public static void main(String args []){                //直接把一个基本类型变量赋给Integer对象                Integer inObj = 5;                //直接把一个boolean类型变量赋给一个Object类型的变量                Object boolobj = true;                //直接把一个Integer对象赋给int类型的变量                int it = inObj;                if(boolobj instanceof Boolean){                        //先把Object对象强制类型转换为Boolean类型,再赋给boolean变量                        boolean b = (Boolean)boolobj;                        System.out.println(b);                }                    }    }
进行自动装箱和自动拆箱时必须注意类型匹配,例如Integer只能自动拆箱成int类型的变量,不要试图拆箱成boolean类型的变量;与之类似的是,int类型的变量只能自动装箱成Integer对象(即使赋给Object类型的变量,那只是利用了JAVA的向上自动转型特性),不要试图装箱成Boolean对象。
除此之外,包装类还可实现基本类型变量和字符串之间的转换,除了Chracter之外的所有包装类都提供了一个parseXxx(String s)静态方法,用于将一个特定字符串转换成基本类型变量;除此之外,在String类里也提供了多个重载valueOf()方法,用于将基本类型变量转换成字符串,如下例:
public class Primitive2String{        public static void main(String args []){                String intStr = "123";                int it = Integer.parseInt(intStr);                System.out.println(it);                String floatStr = "4.56";                float ft = Float.parseFloat(floatStr);                System.out.println(ft);                //把一个float变量转换成String变量                String ftStr = String.valueOf(2.345f);                System.out.println(ftStr);                //把一个布尔变量转换成String变量                String boolStr = String.valueOf(true);                System.out.println(boolStr.toUpperCase());        }        }
如果希望把基本类型变量转换成字符串,还有一种更简单的方法,将基本类型变量和""进行连接运算,系统会自动把基本类型变量转换成字符串。
//intStr的值为“5”
String intStr = 5 + "";

java中数据类型分为两种 : 基本数据类型   引用数据类型(对象)
在 java程序中所有的数据都需要当做对象来处理,针对8种基本数据类型提供了包装类,如下:
int --> Integer
byte --> Byte
short --> Short
long --> Long
char --> Character
double --> Double
float --> Float
boolean --> Boolean
jdk5以前基本数据类型和包装类之间需要互转:
基本---引用   Integer x = new Integer(x);
引用---基本   int num = x.intValue();
1)、Integer x = 1; x = x + 1;  经历了什么过程?装箱->拆箱->装箱;
2)、为了优化,虚拟机为包装类提供了缓冲池,Integer池的大小 -128~127 一个字节的大小;
3)、String池:Java为了优化字符串操作 提供了一个缓冲池;

Integer num1 = 12;

自动拆箱:
System.out.println(num1 + 12);
基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;  这块相等,<=127都是真的
System.out.println(num1 == num2);
Integer num3 = 129;                这块不相等,因为是对象
Integer num4 = 129;
System.out.println(num3 == num4);
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);   这块的道理同上
System.out.println(num5 == num6);

原创粉丝点击