加强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);
本文深入探讨了Java中增强for循环的使用场景与限制,以及自动装箱与自动拆箱功能的原理与应用。通过具体代码示例,展示了如何在不同数据结构上高效地进行迭代与数据转换。
1523

被折叠的 条评论
为什么被折叠?



