Java遍历魔法

测试类
java 复制代码
// 在 Java 中,有几种不同的方式可以用来遍历数组或集合。
// 你提到的三种方式分别是传统的 for 循环、增强型 for 循环(也称为 for-each 循环)和 forEach 方法。每种方法都有其特点和适用场景。
public static void main(String[] args) {

	test1();

	test2();

	test3();

	test4();

	test5();

	test6();
}
代码1 增强for
java 复制代码
// 基本类型不具备for-each功能
public static void test1() {
	Integer[] integers = {1, 2, 3, 4};
	for (Integer elem/*结论:引用值的副本*/ : integers) {
		elem = null;
	}
	System.out.printf("增强for(for-each):%s\n", Arrays.toString(integers));
}
代码2 传统for
java 复制代码
public static void test2() {
	Integer[] integers = {1, 2, 3, 4};
	for (int i = 0; i < integers.length; i++) {
		integers[i] = null;
	}
	System.out.printf("传统for:%s\n", Arrays.toString(integers));
}
代码3 使用基本数据类型数组
java 复制代码
public static void test3() {
	int[] integers = IntStream.of(1, 2, 3, 4, 5).toArray();
	for (int i = 0; i < integers.length; i++) {
		integers[i] = 0;
	}
	System.out.printf("传统for-基本数据类型数组:%s\n", Arrays.toString(integers));
}
代码4 使用自定义类型测试增强for
java 复制代码
public static void test4() {
	@AllArgsConstructor
	@Data
	final class Person {
		int age;
		String name;
	}

	Person[] ps = new Person[]{new Person(19, "haha"), new Person(20, "xx")};
	for (Person i : ps) {
		i = null;
	}

	// 查看结果数组中值并未改变,由此可以推断test1()结论正确即:
	// 增强for(for-each)的局部变量是数组或集合中数据的副本
	System.out.printf("增强for(for-each) 自定义数据类型:%s\n", Arrays.toString(ps));
}
代码5 forEach()方法
java 复制代码
// Java 8 引入了 forEach 方法,它可以用于所有实现了 Iterable 接口的集合类
// 数组不能直接使用
// 适合函数式编程风格
public static void test5() {
	Integer[] integers = {1, 2, 3, 4};
	Arrays.stream(integers).forEach(System.out::println);
}
代码6 Java编译器如何处理增强for
java 复制代码
// java编译器如何处理for-each
// 处理集合的 for-each 循环 当 for-each 循环用于集合(如 List、Set 等)时,编译器会将其转换为使用迭代器(Iterator)的循环。
// 处理数组的 for-each 循环 当 for-each 循环用于数组时,编译器会将其转换为传统的 for 循环,通过索引访问数组元素。
// test1()将转换成test6()
public static void test6() {
	Integer[] integers = {1, 2, 3, 4};
	for (int i = 0; i < integers.length; i++) {
		Integer elem = integers[i];
		elem = null;
	}
	System.out.printf("增强for(for-each):%s\n", Arrays.toString(integers));
}
相关推荐
Answer_ism32 分钟前
【SpringMVC】SpringMVC拦截器,统一异常处理,文件上传与下载
java·开发语言·后端·spring·tomcat
-一杯为品-2 小时前
【小项目】四连杆机构的Python运动学求解和MATLAB图形仿真
开发语言·python·matlab
丁总学Java2 小时前
深入解析 Java Stream API:筛选根节点的优雅实现!!!
java·stream·collectors·lambda 表达式
神仙别闹2 小时前
基于Python的垃圾短信分类
java·python·分类
qq_13948428822 小时前
springboot444-基于Vue的网络小说交流平台(源码+数据库+纯前后端分离+部署讲解等)
java·vue.js·spring boot·mysql·spring·maven·intellij-idea
好好学习 6662 小时前
gitlab-ci.yml文件详解
java·ci/cd·gitlab
蝉叫醒了夏天2 小时前
【深度揭秘Maven】
java·maven
脑子慢且灵2 小时前
JavaIO流的使用和修饰器模式(直击心灵版)
java·开发语言·windows·eclipse·intellij-idea·nio
欣然~3 小时前
基于蒙特卡洛方法的网格世界求解
开发语言·python·信息可视化
遥不可及~~斌3 小时前
深入理解 Spring Boot 应用的生命周期:从启动到关闭的全流程解析
java