导包:import java.util.Scanner;
说明:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
功能:实现键盘输入数据到程序当中
构造方法摘要:
方法摘要(部分):
使用示例
import java.util.Scanner; // 导包 public class scanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建 int num = scanner.nextInt(); // 使用 System.out.println("输入的数字是:" + num); } }出于性能考虑,java中基本数据类型不是对象,但java提供了包装类,可以把基本数据类型当成类处理
包装类是一种引用数据类型,都位于java.lang包下,可以直接使用
以下是各种基本数据类型和其包装类的对应关系
基本数据类型包装类intIntegerdoubleDoublefloatFloatcharCharacterbyteByteshortShortlongLongbooleanBoolean包装类没有无参构造方法,一般既可以用基本数据类型值,也可以用表示数值的字符串来构造包装类。比如Integer类的构造方法摘要如下 使用其他包装类时也类似
new Double(5.0) = new Double("5.0") new Integer(5) = new Integer("5")所有的包装类都是不可变的,它们创建的对象也是不可变对象。也就是说其对象一旦创建,其内容不可修改。String也是一种不可变类
数值包装类都很类似,以下是他们都具备的常见方法
都具有把对象转为基本类型值的方法(每个数值类都有全部这些,可以返回类型转换后的值)
.doubleValue() .floatValue() .intValue() .longValue() .shortValue() .byteValue() // 使用示例 new Double(12.4).intValue() // 返回 12 new Integer(12).doubleValue() // 返回 12.0都具有常量MAX_VALUE 和 MIN_VALUE
Byte/Short/Long/Integer: 表示最大值和最小值Float/Double: 表示最大值和最小正值都有.compareTo(x)方法,用来把对象值和对象x比较,大于返回1;等于返回0;小于返回-1
new Double(12.4).compareTo(new Double(12.3)) // 返回1 new Double(12.4).compareTo(new Double(12.4)) // 返回0 new Double(12.4).compareTo(new Double(12.5)) // 返回-1都有一个静态方法.valueOf(String s),可以创建一个对象,并把它初始化为字符串s的值
Double doubleObject = Double.valueOf("12.4");都有两个静态重载方法,用于返回字符串字面值及进行进制转换
// XXX可以是short/long/int/double/float public static XXX parseXXX(String s) //把十进制写法的字符串转为十进制值 public static XXX parseXXX(String s, int radix) //把radix进制写法的字符串转为十进制值(如果s不是radix进制的写法,会报错) // 示例 Integer.parseInt("11",2) 返回3转字符串方法 .toString()
Integer.toString(num) //十进制形式转字符串 Integer.toString(num,radix) //radix进制形式转字符串包装类和基本数据类型的自动转换
从JDK1.5+开始,支持自动装箱和拆箱
装箱:基本类型转为包装类型拆箱:包装类型转为基本类型如果一个对象出现在需要基本类型值的环境下,编译器会自动拆箱,反之会自动装箱
自动装箱:Integer intObject = 2; 自动变为 Integer intObject = new Integer(2); 自动拆箱:int i = new Integer(1); 自动变为 int i = 1;示例:
Integer[] intArry = {1,2,3}; //三次自动装箱 System.out.println(intArray[0]+intArray[1]+intArray[2]); //三次自动拆箱导包:import java.util.Math;
说明:
Arrays类是一个数学计算相关的工具类,里面提供了大量静态方法,用来实现常见的数学运算通常不需要创建Math类对象实例,直接通过类名使用其静态方法即可常用方法
常量:Math.PI、Math.E
三角函数方法
指数函数方法
取整方法
最值方法
随机数方法
public static double random():返回一个[0.0 , 1.0)之间的double还可以用Random类import java.util.Random //先import Random包 int index = new Random().nextInt(N); //index是(0,N]中的任意整数构造方法摘要
常用的构造方法
// 1. 创建一个空白字符串"" String str1 = new String(); // str1 = "" // 2. 通过字符数组创建 char[] charArray = {'A','B','C'}; String str2 = new String(charArray); // str2 = "ABC" // 3. 通过字节数组创建 byte[] byteArray = {97,98,99}; // ABC的ASCII码 String str3 = new String(byteArray ); // str3 = "ABC" // 4. 通过字面值直接创建 String str4 = "ABC"; // str4 = "ABC"示例代码
public class demo06_StringPool { public static void main(String[] args) { String str1 = "ABC"; String str2 = "ABC"; char[] charArray = {'A','B','C'}; String str3 = new String(charArray); System.out.println(str1 == str2); // true System.out.println(str1 == str3); // false System.out.println(str2 == str3); // false } }看一下内存中的存储情况
首先str1通过字符串字面值构造的字符串对象,于是jvm在堆中建立了byte数组,然后在字符串常量池中创建一个String对象(假设其地址是0x666)指向它,最后把str1指向这个常量池中的对象。当str2通过相同的字符串字面值构造时,jvm在字符串常量池中找到了一样的String对象记录,于是直接把其地址0x666赋值给str2通过char数组创建str3时,jvm先把char数组转换为byte数组存储于堆中,再在堆中非字符串常量池区域建立一个String对象(假设它的地址是0x999)指向它,最后把str3指向这个String对象。输出分析:java中使用==进行比较时
若比较的是基本类型:直接比较字面值若比较的是引用类型:直接引用值(地址值)由于str1和str2指向堆中同一个String对象,而str3指向不同的String对象,所以输出为true,false,false