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