可变参数、自动装箱与自动拆箱

来源:互联网 发布:h3c 添加免认证mac 编辑:程序博客网 时间:2024/06/03 03:41

一、可变参数:
1、需求: 定义一个函数做加法功能(函数做几个数据的加法功能是不确定)。
方式一:函数重载,但是只要多一个参数就要重写一次方法,太麻烦。
方式二:数组

方式三:可变参数

2、可变参数的格式:
数据类型… 变量名

3、可变参数要注意的细节:
1)如果一个函数的形参使用上了可变参数之后,那么调用该方法的时候可以传递参数也可以不传递参数。
2)可变参数实际上是一个数组对象。

3)可变参数必须位于形参中的最后一个参数。
4)一个函数最多只能有一个可变参数,因为可变参数要位于形参中最后一个位置上。

二、自动装箱与自动拆箱
1、java是面向对象 的语言,任何事物都可以使用类进行描述,sun就使用了一些类描述java中八种基本数据类型数据。

基本数据类型        包装类型  byte            Byte  short           Short  int             Integer  long            Long   float           Float  double          Double   boolean         Boolean   char            Character

2、基本数据类型数据有了对应的包装类型的好处:

public class Demo7 {    public static void main(String[] args) {        String str = "12";        //字符串转换成int类型数据。 可以把字符串转换成对应的数字        int i = Integer.parseInt(str);        System.out.println(i+1);        //把数字转换成字符串        System.out.println("把整数转换成对应的字符串:"+i+"");        System.out.println("把整数转换成对应的字符串:"+Integer.toString(i));        //把整数转换成对应的进制形式        System.out.println("10的二进制(字符串形式):"+ Integer.toBinaryString(10));        System.out.println("10的八进制(字符串形式):"+ Integer.toOctalString(10));        System.out.println("10的十六进制(字符串形式):"+ Integer.toHexString(10));        //可以把字符串当成对应的进制数据帮你转换,查看源码发现最大为三十六进制,不能再大了。        String data = "10";        //二进制        int a = Integer.parseInt(data, 2);        System.out.println("a="+a);        //三进制        int a2 = Integer.parseInt(data, 3);        System.out.println("a2="+a2);        //集合: 集合是可以存储任意对象类型数据的容器。        ArrayList list = new ArrayList();        list.add(1);        list.add(2);        list.add(3);        //那为什么存入基本数据类型数据不报错呢?原因如下:        //自动装箱: 自动把java的基本数据类型数据转换成对象类型数据。        int temp = 10;  //基本数据类型        //JDK1.5之前的写法(没有自动装箱的功能):        //Integer b = new Integer(temp);        Integer b = temp; //把a存储的值赋予给b变量。        //自动拆箱: 把引用类型的数据转换成基本类型的数据        Integer c = new Integer(13);        //JDK1.5之前的写法(没有自动拆箱的功能):        //int d = c.intValue();         int d = c;         System.out.println(d);        //引用的数据类型        Integer e = 127;        Integer f = 127;         System.out.println("同一个对象吗?"+(e==f));         // 查看Integer源码中的IntegerCache:        // Integer类内部维护了缓冲数组,该缓冲数组存储的-128~127 这些数据在一个数组中。        // 如果你获取的数据是落入到这个范围之内的,那么就直接从该缓冲区中获取对应的数据。          Integer e2 = 128;        Integer f2 = 128;         System.out.println("同一个对象吗?"+(e2==f2));    }}
0 0