目录
可变字符串:StringBuffer,StringBuilder
包装类
概念:八个基本数据类型对应的引用数据类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char character
boolean Boolean
数据类型转换
将字符串转为整数
int 转换后的数字 = Integer.parseInt(字符串);
将字符串转换为小数
double 转换后的数字 =Double.parseDouble(字符串);
将字符串转换为布尔
boolean变量名=Boolean.parseBoolean(字符串);
将各种类型转换为字符串
String 变量名 =""+要转换的数据;
int a2=Integer.parseInt("74683");
System.out.println(a2);//将字符串转为数字a1
double b2=Double.parseDouble("114.514");
System.out.println(b2);//将字符串转为小数
boolean c2=Boolean.parseBoolean("true");
boolean d2=Boolean.parseBoolean("TRUE");//只要被转化的字符串不为true(不区分大小写)都会被boolean转为false
boolean c3=Boolean.parseBoolean("34");
System.out.println(c2);
System.out.println(d2);
System.out.println(c3);
String string=""+12345;//""+
自动拆箱与自动装箱
自动拆箱:
将基本数据类型的包装类对象转换为基本数据类型
自动拆箱:
将基本数据类型再转换为对应的包装类对象
数字缓冲区:-128~127
常用类
Random
随机数
常用方法:
nextInt(最大值)
newBoolean()
package test;
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
Random nebe=new Random();
int a1=nebe.nextInt(89);//此时随字数范围为[0,89)
System.out.println(a1);
Random bueR=new Random();
boolean b1=bueR.nextBoolean();//此时为随机true或false
System.out.println(b1);
}
}
Scanner
键盘录入
常用方法:
next() //输入字符类型
nextInt() //输入整形类型
nextLong() //
nextBoolean() //输入布尔类型
Scanner d1=new Scanner(System.in);
String e1=d1.next();
System.out.println(e1);
System
提供静态属性:
in:输入
out:输出
err:错误输出
Scanner d1=new Scanner(System.in);//System在此提供静态属性输入
String e1=d1.next();
System.out.println(e1);//输出
System.err.println(e1);//错误输出
提供的静态方法:
arrayCopy(原数组,拷贝开始位置,目标数组,复制开始位置,拷贝数据长度);
int []arr=new int[] {3,4,5,6,7,8,9};
int []arr2=new int[6] ;
System.arraycopy(arr, 0, arr2, 3, 2);
//原数组为arr,从它的第0个下标开始,复制到arr2中,从arr2的第三个下标开始,复制两个长度
currentTimeMillis():获取当前系统时间距离1970年1月1日00:00:00(格林威治时间)的时间差单位 ms
gc():手动调用垃圾回收机制
exit(int starts):退出当前程序,0正常退出,其他非正常退出
Arrays
数组操作工具
提供的静态方法:
sort():排序
int []arr4=new int[] {43,455,5,444,5,9,5,3,4,5};
Arrays.parallelSort(arr4);
for (int i : arr4) {
System.out.println(i);
}
toString(数组):将数组转换为特定格式的字符串
System.out.println(Arrays.toString(arr4));
Object
所有类的父类
1.所有类的对象都可以转换为Object类的对象
2.Object提供的方法是所有对象都有的方法
提供的方法:
getClass():获取类的对象,之后反射会说
hashCode():获取对象的哈希码值
如果不重写该方法,可以理解为该值就是对象在堆内存中的地址
a1.hashCode();
System.out.println(a1.hashCode());
toString():将对象转换为字符串
注意:使用Sout打印对象时,默认调用haximazh对象的toString方法
可以看到Object源码提供的方法为 包名+类名+@+哈希码值
如要转化,还得自己重写
equals():比较是否相同
Object提供的方法是比较对象的内存地址是否相同
所以如果用此比较对象的,是不正确的,需要在类中重写
1.判断内存地址是否相同
2.判断传入对象是否与调用equals方法的兑现是否为同一个类的对象
将传入的对象转换为该类对象,是的话逐一对比其属性
Dog a1=new Dog("李岁",2);
Dog a2=new Dog("李岁",2);
System.out.println(a1.equals(a2));
可以看到并不能比较内容,需要重写
重写
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(this.nameString.equals((Dog)obj.nameString)&&this.age==(dog
)obj.age) {
return true;
}
return false;
}
Dog a1=new Dog("李岁",2);
Dog a3=a1;
Dog a2=new Dog("李岁",1);
System.out.println(a1.equals(a2));
System.out.println(a1.equals(a3));
不过一般我们也可以用编译器自动生成
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Dog other = (Dog) obj;
if (age != other.age)
return false;
if (nameString == null) {
if (other.nameString != null)
return false;
} else if (!nameString.equals(other.nameString))
return false;
return true;
}
可以看到思路大体上一样
finalize
作用:回收该对象所占内存地址时调用
字符串相关
不可变字符串:String
字符串修改后会生成新字符串,存储在常量区,不会被系统回收
常用的方法:
1. charAt(index);获取字符串指定位置的字符
String a1="java中foreach,可以认为是增强版的for语句循环,它可以减少代码量";
char a2=a1.charAt(0);
System.out.println(a2);
System.out.println(a1.charAt(3));
可以看到下标依旧是从0开始
2. length():获取字符串长度
a1.length();//获取长度
3.indexOf(子字符串):子字符串在字符串中第一次出现的位置,如果没有返回-1
String a1="java中foreach,可以认为是增强版的for语句循环,它可以减少代码量";
System.out.println(a1.indexOf("java"));
System.out.println(a1.indexOf("c++"));
4.lastIndexOf(子字符串):子字符串在字符串中最后一次出现的位置,如果没有返回-1
String a1="java中foreach,可以认为是增强版的for语句循环,java里它可以减少代码量";
System.out.println(a1.lastIndexOf("java"));
System.out.println(a1.lastIndexOf("c++"));
5.contains(子字符串):判断子字符串是否存在
String a1="java中foreach,可以认为是增强版的for语句循环,java里它可以减少代码量";
System.out.println(a1.contains("java"));
System.out.println(a1.contains("c++"));
可见返回值为boolean型
6.equals(字符串):判断字符串内容是否相同,区分大小写
7.equalsIgnoreCase(字符串):判断字符串内容是否相同,不区分大小写
String b1="AbCdef";
String b2="abcdeF";
System.out.println(b1.equalsIgnoreCase(b2));
8.toUpperCase():将字符串转换为大写
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj";
System.out.println(a1.toUpperCase());
9.toLowerCase():将字符串转换为小写
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj";
System.out.println(a1.toLowerCase());
10.endsWith(子字符串):判断字符串是否以子字符串结束
11.startsWith(子字符串):判断字符串是否以子字符串开始
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj ";
System.out.println(a1.endsWith("ad"));//是否以ad结束
System.out.println(a1.endsWith("aj"));//是否以aj结束
System.out.println(a1.startsWith("Ae"));//是否以Ae开始
System.out.println(a1.startsWith("we"));//是否以we开始
12.split(子字符串):将字符串切割
public class Stringgg {
public static void main(String[] args) {
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj ";
String[] a2=new String[] {};
a2=a1.split("A");//用A将字符串切割
for (String string : a2) {
System.out.println(string);
}
}
}
a2=a1.split("Ae");
多个字符也可以
13.substring(开始位置,结束位置):截取
注意:开始位置包含,结束位置不包含
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj ";
System.out.println(a1.substring(0,25));//截取0~25的位置出来,很明显结果是个字符串
14.replace(oldStr,newString):替换
String a1="AedAEERdAeRFsWeWGHhaAKKAMNAJAKkkakkjajaj ";
System.out.println(a1.replace("A","B"));//将A都替换为B
System.out.println(a1.replaceAll("Ae", "666"));//将Ae都替换为666
15.isEmpty():判断字符串是否为空字符串
a1.isEmpty();//判断字符串是否为空
返回值为boolean型
16.trim():忽略字符串前后空白
System.out.println(a1.trim());//忽略前后空白
17.+:字符串连接符
18.toCharArray();//传化为字符数组
aString.toCharArray();//传化为字符数组
char[] a3=aString.toCharArray();//传化为字符数组
System.out.println(a3);
for (char d : a3) {
System.out.println(d);
}
可变字符串:StringBuffer,StringBuilder
字符串修改后会生成新字符串,存储在堆内存,会被系统回收
StringBuffer:
线程安全的, JDK1.0使用,效率低
StringBuilder:
线程不安全, JDK1.使用,效率高
方法:
append(被添加的字符串):添加到尾部
StringBuilder a1=new StringBuilder();
a1.append(""+879);
System.out.println(a1);
a1.append("+zhouhzou");
System.out.println(a1);
delete(start,end):删除指定位置的字符串
a1.delete(2, 5);
System.out.println(a1);//删除的也是下标开始[2,5 )
insert(index,添加的字符串):指定位置添加字符串
a1.insert(2, "jia");
System.out.println(a1);//在第二个位置开始添加字符串jia
String str = "";
long a = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
str += i;
}
long b = System.currentTimeMillis();
//输出的是循环所用时间
System.out.println(b - a);
StringBuilder sb = new StringBuilder();
long c = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
sb.append(i);
}
long d = System.currentTimeMillis();
//输出的是循环所用时间
System.out.println(d - c);
可见使用String大量拼接非常耗时
使用不可变字符串String对字符进行大量修改,是在常量区重新创建字符,会使常量区溢出,且耗时,如果需要大量修改,可以使用可变字符串
BigDecimal
作用:精准计算
由于浮点运算运用二进制,难免有的不准确例如:
public class Naber {
public static void main(String[] args) {
double a=0.1;
double b=0.01;
double c=a-b;
System.out.println(c);
}
}
结果是不准确的
注意:创建对象时,传入字符串
常用方法:
subtract:减
add:加
multiply:乘
divide:除
xxxValue:将BigDecimal对象转换成指定的基本数据类型的值
BigDecimal a1=new BigDecimal(""+0.1);
BigDecimal b1=new BigDecimal(""+0.01);
BigDecimal c1=a1.subtract(b1);//此类不能使用+-*/,只能使用其提供的方法 此为减法
/**
*
* add加
* multiply乘
* divide 除
*
*
*/
System.out.println(c1);
double d=a1.doubleValue();
/*
* 数据类型 标识符 = 标识符。被转换的数据类型Value();
*
*
*/
时间相关
Date
时间
构造函数与方法
构造函数:
Date():获取当前时间
Date(long time):获取距今格林威治时间时间单位毫秒
getTime():获取对象距离格林威治时间差
d1.after(Date d2):d1是否在d2之后//返回值为boolean
d1.before(Date d2):d1//返回值为boolean
Date date = new Date();//获取时间
date.getTime();//获取距离格林威治时间毫秒
System.out.println(date);
System.out.println(date.getTime());
Calendar
日历
常用方法
Calendar c = Calendar.getInstance();//生成变量
System.out.println(c);
创建对象,打印的是日历所有值
getInstance():获取Calendar的对象
set(int field,int value):修改
c.set(Calendar.YEAR,2000);//修改年
c.set(Calendar.MONTH,3);//修改月
c.set(Calendar.DAY_OF_MONTH, 1);//修改日
c.set(Calendar.HOUR_OF_DAY, 13);//修改小时
c.set(Calendar.MINUTE, 14);//修改分钟
c.set(Calendar.SECOND, 52);//修改秒
c.set(Calendar.MILLISECOND, 520);//修改毫秒
System.out.println(c);
可见值已被修改
实则两者为 Calendar 的get set方法
getTime():将Calendar对象转化为Date对象
Date date = c.getTime();将calendar对象转换为date对象
SimpleDateFormat
概念
时间格式化
作用:
将Date对象转换为指定格式字符串
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//将date对象转换为特定格式的字符串
String str = sdf.format(date);
System.out.println(str);
注意:
y:年
M:月
d:日
h:12小时
H:24小时制
m:分钟
s:秒
S:毫秒
将特定格式的字符转换为date对象:
String time = "2000年1月1日 8:00:00";
//将特定格式的字符转换为date对象
Date date2 = sdf.parse(time);
System.out.println(date2);