一、变量
1. 基本数据类型
Java语言有8种基本数据类型,分别用于存储整数、浮点数、字符数据和布尔类型数据,其存储空间和使用场景如下表所示:
2. 变量保存的位置
- 基本类型:栈
- 引用数据类型:堆保存真实数据,栈保存地址
3. 参数的值传递和引用传递
- 基本数据类型:按值传递
- 引用数据类型:传递变量的地址
4. 比较符 “==”
- 如果针对的是基本类型,只判断值是否相等
- 如果针对的是引用数据类型,判断的是指向内存地址是否一样
二、数组
1. 数组的定义
声明数组的语法: 数据类型[ ] 数组名 = new 数据类型[大小]
2. 数组的初始化
基本类型的数组创建后,其元素的初始值:
byte、short、char、int、long为0;
float和double为0.0;
boolean为false
初始化方法一:
**int[ ] arr = { 10, 23, 30, -10, 21 };** // 元素的个数即为数组的长度
初始化方法二:
**int[ ] arr ;
arr = new int[ ] { 10, 23, 30, -10, 96 };**
注意:[ ]中不可以写长度,元素的个数就是数组的长度。
3. 数组的常用方法
3.1 打印数组
int[] numbers = new int[]{1, 3, 2, 5, 4};
System.out.println(Arrays.toString(numbers));
3.2 检查数组是否包含某一个值
String[] stringArray = { "a", "b", "c", "d", "e" };
boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b);
// true
3.3 在数组中二分查找指定元素key
int[] numbers = new int[]{1, 2, 3, 4, 5, 6};
System.out.println(Arrays.binarySearch(numbers, 5));
// 查找的元素在数组中的角标位置
3.4 将数组的一部分拷贝出来(从被拷贝数组头元素开始算)
String[] words = new String[]{"I", "Love", "China", "!"};
String[] subWords = Arrays.copyOf(words, 2);
3.5 将数组的一部分指定范围拷贝出来
3.5.1 方法一
String[] words = new String[]{"I", "Love", "China", "!"};
String[] subWords = Arrays.copyOfRange(words, 1, 3);
温馨提示:Java关于数组等等的操作,都是包含头不包含尾,例如上面的代码,1,3 得到的 subWords = {“Love”, “China”}
3.5.2 方法二
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
/*代码解释:
Object src : 原数组
int srcPos : 从元数据的起始位置开始
Object dest : 目标数组
int destPos : 目标数组的开始起始位置
int length : 要copy的数组的长度*/
3.6 将数组所有元素用指定元素替换
String[] words = new String[]{"I", "Love", "China", "!"};
Arrays.fill(words, "Yes");
3.7 将数组的指定位置元素用指定元素替换
String[] words = new String[]{"I", "Love", "China", "!"};
Arrays.fill(words, 1, 2, "Yes");
3.8 将数组进行内部排序
int[] numbers = new int[]{1, 3, 2, 5, 4};
Arrays.sort(numbers);
注意:要求数组中元素已经按升序排列
三、随机数
1. 方式一:System.currentTimeMillis()
通过System.currentTimeMillis()来获取随机数。实际上是获取当前时间毫秒数,它是long类型。使用方法如下:
final long l = System.currentTimeMillis();
//若要获取 int类型的整数,只需要将上面的结果转行成 int类型即可。比如,获取 [0, 100)之间的int整数。方法如下:
final long l = System.currentTimeMillis();
final int i = (int)( l % 100 );
2. 方式二:Math.random()
通过Math.random()来获取随机数。实际上,它返回的是 [ 0, 1 ) 的double值。使用方法如下:
final double d = Math.random();
//若要获取int类型的整数,只需要将上面的结果转行成int类型即可。比如,获取[0, 100)之间的int整数。方法如下:
final double d = Math.random();
final int i = (int)(d*100);
3. 方式三:Random类
通过Random类来获取随机数。使用方法如下:
// (1) 创建Random对象。有两种方法可以创建Random对象,如下:
Random random = new Random(); //默认构造方法
Random random = new Random(1000); //指定种子数字
// (2) 通过Random对象获取随机数。Random支持的随机值类型包括:boolean, byte, int, long, float, double。
//比如,获取[0, 100)之间的int整数。方法如下:
int i2 = random.nextInt(100);
附:Random 的函数接口
// 构造函数(一): 创建一个新的随机数生成器。
Random()
// 构造函数(二): 使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。
Random(long seed)
boolean nextBoolean() // 返回下一个“boolean类型”伪随机数。
void nextBytes(byte[] buf) // 生成随机字节并将其置于字节数组buf中。
double nextDouble() // 返回一个“[0.0, 1.0) 之间的double类型”的随机数。
float nextFloat() // 返回一个“[0.0, 1.0) 之间的float类型”的随机数。
int nextInt() // 返回下一个“int类型”随机数。
int nextInt(int n) // 返回一个“[0, n) 之间的int类型”的随机数。
long nextLong() // 返回下一个“long类型”随机数。
synchronized double nextGaussian() // 返回下一个“double类型”的随机数,它是呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
synchronized void setSeed(long seed) // 使用单个 long 种子设置此随机数生成器的种子。