Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数

简介:

1、For each循环: 1.1、语法: 1.2、For each循环的使用: 1.3、嵌套For each循环: 1.4、三种循环遍历集合的列举: 1.5、增强的for循环的缺点: 2、自动装箱/拆箱(Autoboxing/unboxing): 2.1、自动装箱: 2.2、自动拆箱: 2.3、Integer类相关的源代码: 2.3.1、valueOf方法: 3、可变参数: 3.1、包含可变参数的函数: 3.2、接收参数: 3.3、说明:
1、For each循环:

JDK5.0中提供的新特性For each循环的加入简化了集合的遍历。

1.1、语法:
for(type element : array){
    …
System.out.println(element);
    …
}
1.2、For each循环的使用:
public static void main(String[] args) {
    List<String> arrayList = new ArrayList<String>();
    arrayList.add("a");
    arrayList.add("b");
    arrayList.add("c");

    //普通的循环方式
    for(int i=0; i<arrayList.size(); i++){
        System.out.println(arrayList.get(i));
    }

    //使用For each循环
    for(String element : arrayList){
        System.out.println(element);
    }
}
1.3、嵌套For each循环:
int[][] array = {{1,2,3},{1,2}};
for(int[] row : array){
    for(int element : row){
        System.out.println(element);
    }
}
1.4、三种循环遍历集合的列举:
//普通的循环方式
for(int i=0; i<arrayList.size(); i++){
    System.out.println(arrayList.get(i));
}

//迭代循环
for(Iterator<String> iter = arrayList.iterator(); iter.hasNext();){
    System.out.println(iter.next());
}

//使用For each循环
for(String element : arrayList){
    System.out.println(element);
}
1.5、增强的for循环的缺点:
失去了索引信息,不能获取到索引值,只能这样获取:
//使用For each循环
int i = 0;
for(String element : arrayList){
    System.out.println(i + element);
    i++;
}

因为增强的for循环会丢失下标信息,所以当遍历集合或数组时,如果需要方法集合或数组的下标,最好使用旧式的方式来实现循环或遍历。

2、自动装箱/拆箱(Autoboxing/unboxing):

自动装箱/拆箱打打方便类基本类型数据和它们包装类的使用。

自动装箱:把基本数据类型转换为包装类。

自动拆箱:把包转类型自动转换为基本数据类型。

2.1、自动装箱:
//自动装箱
Collection<Integer> c = new ArrayList<Integer>();
c.add(1);
c.add(2);
c.add(3);
2.2、自动拆箱:
//自动拆箱
for(Integer integer : c){
    System.out.println(integer);
}
2.3、Integer类相关的源代码:
2.3.1、valueOf方法:
public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }
这里对应-128~127的整数调用了IntegerCache.cache[i + 128];详细代码如下:
private static class IntegerCache {
        static final int high;
        static final Integer cache[];

        static {
            final int low = -128;

            // high value may be configured by property
            int h = 127;
            if (integerCacheHighPropValue != null) {
                // Use Long.decode here to avoid invoking methods that
                // require Integer's autoboxing cache to be initialized
                int i = Long.decode(integerCacheHighPropValue).intValue();
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - -low);
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }

        private IntegerCache() {}
    }

其主要的功能就是把-128~127的整数缓存起来,当药使用这些数字时,就从这些缓存中获取。

由此可知下面代码运行的结果为true:

Integer m = 127;
Integer n = 127;
System.out.println(m == n);

而下面的代码则为false:

Integer m = 128;
Integer n = 128;
System.out.println(m == n);
3、可变参数:

可变参数使得可以声明一个接受一个可变数目参数的方法。

可变参数必须是方法声明中的最后一个参数。

3.1、包含可变参数的函数:
public static int add(int... arrays){
    int sum = 0;
    for(Integer integer : arrays){
        sum += integer;
    }
    return sum;
}

可变参数部分相当于数组。

3.2、接收参数:
可以为多个参数或数组:
//传递数组
add(new int[]{1,2,3});
//传递参数
add(1,2,3);
3.3、说明:

可变参数本质上是一个数组,声明了可变参数的方法,既可以传递离散的值,也可以传递一个数组对象。

可变参数必须作为方法参数的最后一个参数

相关文章
|
6天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
17 1
|
8天前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
20 2
|
6天前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
98 63
|
18天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
50 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
5天前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 6
|
6天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
12 1
|
6天前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
12 1
|
8天前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
14 2
|
14天前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
|
15天前
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
20 1