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

一、可变参数:
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));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值