java基础40 可变参数、自动装箱和自动拆箱

 一、可变参数

     可变参数是jdk1.5新特性

1.1、可变参数的格式

     数据类型...变量名

//                    数据类型...变量名
public
static void sum(int...arr){ }

1.2、可变参数要注意的细节

    1.如果一个函数的形参上使用上可变参数之后,那么调用该方法的时候可以传递参数也可以不传递参数
    2.可变参数实际上是一个数组对象
    3.可变参数必须位于形参的最后一个参数
    4.一个函数最多只有一个可变参数,因为可变参数要位于形参的最后一个位置上

1.3、例子

方法1:

 1 package com.dhb.pattern;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-13
 5  * 此方法是使用原始的方法
 6  */
 7 //需求:定义一个函数做加法运算(函数要做多少个数据的加法功能?是不确定的)
 8 public class Demo3 {
 9     public static void main(String[] args) {
10         int[] arr = {1,2,5,6,7,9,10,16};
11         sum(arr);
12     }
13     public static void sum(int[] arr){
14         int sum=0;
15         for (int i : arr) {//增强for循环 遍历数组
16            sum+=i;
17         }
18         System.out.println(sum);//返回结果:56
19     } 
20 }

方法2:

 1 package com.dhb.pattern;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-13
 5  * 此方法使用的是可变参数
 6  */
 7 //需求:定义一个函数做加法运算(函数要做多少个数据的加法功能?是不确定的)
 8 public class Demo3 {
 9     public static void main(String[] args) {
10         sum(1,2,6,7,8,16,20);
11     }
12     //                  形参类型...变量名
13     public static void sum(int...arr){//可变参数
14         int sum=0;
15         for (int i : arr) {
16            sum+=i;
17         }
18         System.out.println(sum);//返回结果:60
19     } 
20 }

方法二的拓展

 1 package com.dhb.pattern;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-13
 5  */
 6 //需求:定义一个函数做加法运算(函数要做多少个数据的加法功能?是不确定的)
 7 public class Demo3 {
 8     public static void main(String[] args) {
 9         sum("12",1,2,6,7,8,16,20);
10     }
11     //                            形参类型...变量名
12     public static void sum(String s,int...arr){//可变参数
13         int sum=0;
14         for (int i : arr) {
15            sum+=i;
16         }
17         System.out.println(sum);//返回结果:60
18     } 
19 }
20 //说明:结果依然是60,String类型的“12”并没有参与加法运算   详细说明,请看上方的“可变参数注意细节

二、自动装箱和自动拆箱

 八种基本数据类型          包装类型
整型:
        byte                     Byte
        short                    Short
        int                        Integer
        long                      Long
浮点型:
        float                      Float
        double                   Double
boolean(布尔型):
        boolean                 Boolean
字符型:
        char                      Character

 1 package com.dhb.pattern;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-13
 5  *
 6  */
 7 public class Demo4 {
 8     public static void main(String[] args) {
 9 
10         //自动装箱:自动把java的基本数据类型转换为对象类型数据
11         int temp=10;//基本数据类型
12         Integer b=temp; //把temp存储的值赋给了b变量(b变量是Integer包装类型)
13         System.out.println(b);//返回结果:10
14         
15         //自动拆箱:把引用数据类型的数据转为基本数据类型数据
16         Integer c=new Integer(13);
17         int d=c;
18         System.out.println(d);//返回结果:13
19 
20     }
21 }

 

 

附录:

 1 package com.dhb.pattern;
 2 
 3 /**
 4  * @author DSHORE / 2018-6-13
 5  *
 6  * jdk1.5新特性之-----自动装箱与自动拆箱
 7  */
 8 public class Demo4 {
 9     public static void main(String[] args) {
10         String str="12";
11         //字符串转为int类型数据,可以把字符串转为对应的数字
12         int i=Integer.parseInt(str);
13         System.out.println(i);//返回结果:12
14         
15         //把数字转为字符串
16         System.out.println("把整数转成对应的字符串:"+Integer.toString(i));//返回结果:12  注:这个12是字符串,而不是整数
17         
18         //把整数转为对应的进制类型形式
19         System.out.println("10的二进制:"+Integer.toBinaryString(10));//返回结果:1010
20         System.out.println("10的十六进制:"+Integer.toHexString(10));//返回结果:a
21         
22         //可以把字符串当成对应的数据帮你进行数据转换
23         String data="10";
24         int a=Integer.parseInt(data,2);
25         System.out.println("a的值:"+a);//返回结果:2
26 
27         //自动装箱:自动把java的基本数据类型转换为对象类型数据
28         int temp=10;//基本数据类型
29         Integer b=temp; //把temp存储的值赋给了b变量(b变量是Integer包装类型)
30         System.out.println(b);//返回结果:10
31         
32         //自动拆箱:把引用数据类型的数据转为基本数据类型数据
33         Integer c=new Integer(13);
34         int d=c;
35         System.out.println(d);//返回结果:13
36         
37         Integer e=126;
38         Integer f=126;
39         System.out.println("同一个对象吗:"+(e==f));//返回结果:true
40         Integer g=128;
41         Integer w=126;
42         System.out.println("同一个对象吗:"+(g==w));//返回结果:false
43         /* 解析:Integer类内部维护了一个缓冲数组,该缓冲数组存储-128~127
44          *     这些数据在一个数组中,如果你获取的数据落入到这个范围之内的,那么就直接从缓冲区中获取对应的数据.
45          */    
46     }
47 }

 

 

 

 

 

 

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9177485.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

posted @ 2018-06-13 14:05  DSHORE  阅读(444)  评论(0编辑  收藏  举报