Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar
三、StringBuffer和StringBuilder类 ★
一、包装类
1.概念:为8大基本数据类型对应的提供了引用数据类型,则这些引用数据类型称为包装类
2.数据类型:
1)基本数据类型
2)引用数据类型
- 数组
- 用class定义的
- 用interface定义的
3.需求如:
① 获取int类型的最大值
② 将某个整数转换成十六进制形式
int i=10;
Integer i2=new Integer(i);
4.分类 ★
byte———————————— Byte
short———————————— Short
int————————————— Integer
long———————————— Long
float———————————— Float
double——————————— Double
char———————————— Character
boolean—————————— Boolean
5.基本类型和包装类型之间的转换 ★
jdk5.0之前:
手动装箱:
方式一:Integer i = new Integer(10);
方式二:Integer i2 = Integer.valueOf(10);
手动拆箱:
int j = i.intValue();
jdk5.0之后:
自动装箱:
Integer i = 10;
自动拆箱:
int j = i;
6.包装类型和String类型之间的转换
包装类型————>String类型
Integer i = 10;
//方式1:
String s1= i.toString(); //方式2:
String s2 = String.valueOf(i); //方式3:
String s3 = i+""; System.out.println(s3);
String————>包装类
//方式1:
Integer j = new Integer(s1); //方式2:
Integer j2 = Integer.valueOf(s2);
7.基本类型和String类型之间的转换
基本类型————>String类型
int i = 10;
//方式1:
String s=i+"";
//方式2:
String s2 = String.valueOf(i);
String————>基本类型(除了char类型)
int j = Integer.parseInt(s); char c = s.charAt(0);
8.包装类型中的常见API
1)通用的方法:
valueOf:将String类型或基本类型转换成对应的包装类型
parseXX:将String类型转换成对应的基本类型
xxValue:将包装类型转换成对应的基本类型
2)Character类的常见方法:
toUpperCase
toLowerCase
isUpperCase
isLowerCase
isDigit
isLetter
isWhiteSpace
二、String类
1.理解
String类用于保存一组字符串序列
"john"、""都相当于字符串常量对象
2.创建对象
方式1:直接赋值
String s = "hello";
方式2:通过调用构造器
String s = new String("hello");
【面试题】String两种创建对象方式的区别
方式一:先去常量池查看是否有“hello”字符序列,如果没有,则创建,如果有直接引用该地址,s指向的是常量池的对象
方式二:需要在堆中创建对象,该对象维护了一个value属性,value指向常量池的“hello”,如果常量池中没有“hello”,则创建,再指向;如果已经有了,则直接用value指向
s指向的是堆中的对象
3.String类的常见方法
| 方法名 | 用途 |
| length | 获取字符个数 |
| charAt | 获取指定索引处的字符 |
| toUpperCase | 转大写 |
| toLowerCase | 转小写 |
| indexOf | 获取字符或字符串第一次出现的索引,如果找不到返回-1 |
| lastIndexOf | 获取字符或字符串最后一次出现的索引,如果找不到返回-1 |
| startsWith | 判断是否以xx开头 |
| endsWith | 判断是否以XX结尾 |
| regionMatches | 判断是否某范围内的子串一致 |
| contains | 判断子串是否存在,返回true|false |
| compareTo | 比较两个字符串大小 |
| equals/equalsIgnoreCase | 判断字符串内容是否相等 |
| substring | 截取子串 |
| replace/replaceAll | 替换 |
| trim | 去前后空格 |
| split | 拆分 |
| concat | 拼接字符串 |
| toCharArray | 转换成字符数组 |
三、StringBuffer类
1.String类和StringBuffer的对比
相同点:都用于保存字符串,都可以对字符串进行一些增删或其他处理的操作
不同点:
- String类用于保存字符串常量
- StringBuffer类用于保存字符串变量
2.StringBuffer类创建对象
只能通过调用构造器创建对象!
new StringBuffer(); //构造一个初始容量为16的char数组
new StringBuffer(string); //构造一个初始容量为string.length+16的数组,并初始化值为string
new StringBuffer(capacity); //构造一个初始容量为capacity的char数组
3.StringBuffer类和String类之间的转换
1)StringBuffer——>String
StringBuffer buffer = new StringBuffer("john");
//方式一:
String s1 = buffer.toString();
//方式二:
String s2 = new String(buffer);
2)String————>StringBuffer
String s = "鸠摩智";
//方式一:
StringBuffer b1 = new StringBuffer(s); //方式二:
StringBuffer b2 = new StringBuffer();
b2.append(s);
4.StringBuffer类的方法
增 append
删 delete
改 replace
查 indexOf/lastIndexOf
插入 insert
反转 reverse
长度 length
5.StringBuffer和StringBuilder的对比
| 共同点 | 版本 | 线程安全 | (同步)效率 | |
| StringBuffer | 保存可变字符串 | 老 | 安全 | 较低 |
| StringBuilder | 保存可变字符串 | 新 | 不安全 | 较高 |
- 线程安全性
String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
- 性能
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
- 对于三者使用的总结:
- 操作少量的数据: 适用String
- 单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
- 多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
(效率:StringBuilder>StringBuffer>String)
四、Math类
包含一系列的用于数学运算的静态方法。
1.常见方法
| 方法名 | 作用 |
| sqrt | 求开方 |
| pow | 求幂 |
| ceil | 向上取整 |
| floor | 向下取整 |
| round | 四舍五入,返回整型 |
| abs | 绝对值 |
| random | 随机数 |
| max | 最大值 |
| min | 最小值 |
五、Arrays类
包含一系列用于数组管理和操作的方法
常见方法:
sort(T[]) :对数组的元素进行自然排序,要求元素必须实现了Comparable
sort(T[],Comparator):对数组的元素进行定制排序,元素本身可以不实现Comparable
binarySearch(T[],key):对数组通过二分搜索法进行查找,如果key找到了,返回索引,否则返回负数。要求:要查找的数组必须提前排好序!
copyOf(T[],length):复制数组的元素
equals(T[],T[]):判断两个数组的内容是否相等
fill(T[],key):填充数组的各元素值为key
toString():将数组各元素进行拼接,返回String
六、System类
常见方法:
arrayCopy 复制数组元素,一般使用Arrays.copyOf代替
exit:退出程序
currentTimeMillens:获取当前时间距离1970-1-1的毫秒数。
gc:运行垃圾回收器
七、BigDecimal和BigInteger类
常见方法:
add 加法
substract减法
multiply乘法
divide除法,注意:可以添加参数2设置四舍五入模式
八、日期类
1.第一代日期
java.util.Date类
java.text.SimpleDateFormat类
2.第二代日期
java.util.Calendar类
3.第三代日期(jdk8新特性)
LocalDate|LocalTime|LocalDateTime类:类似于Calendar
Instant:类似于Date
DateTimeFormatter:类似于SimpleDateFormat
Java中的常用类:包装类、String、StringBuffer、StringBuilder、Math、System、Arrays、BigInteger、BigDecimal、Data、Calendar的更多相关文章
- Java常用类:包装类,String,日期类,Math,File,枚举类
Java常用类:包装类,String,日期类,Math,File,枚举类
- java中的常用类(二)
java中的常用类(二) Math类 Math类的声明:public final class Math extends Object Math类是与数学计算有关的类,里面的方法都是静态方法,直接使用类 ...
- Java中特殊的类——包装类
Java中特殊的类--包装类 包装类就是将基本数据类型封装在类中. 1.包装类 (1)自定义包装类 将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理. 此时IntDemo类就是in ...
- java 中的常用类
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等. 基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能 ...
- Java学习笔记-Java中的常用类
Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...
- Java中的Scanner类和String类
1:Scanner的使用(了解) (1)在JDK5以后出现的用于键盘录入数据的类. (2)构造方法: A:讲解了System.in这个东西. 它其实是标准的输入流,对应于键 ...
- Java中的常用类——Arrays
数组工具类java.util.Arrays Arrays类中的方法都是static修饰的静态方法,因此可以直接使用类名.方法名来调用,而不用通过new使用对象来调用(是"不用"不是 ...
- Java中的常用类有哪些
1NumberFormat 2DecimalFormat 3BigDecimal 4Math 5Random 6DateFormat 7SimpleDateFormat 8Calendar 9Date ...
- Java常用类之String类、Stringbuffer和Random类练习
定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...
随机推荐
- WPF导出发布安装包,无法验证发行者解决办法
右击工程项目点发布->完成 此时在工程目录下生成了安装文件setup.exe 同时又在工程下生成了临时证书WpfApp1_TemporaryKey.pfx 如果此时强行安装会弹出如下警告 接下来 ...
- C++ GUI Qt4学习笔记03
C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...
- OI比赛常数优化
这是一篇玄学文章 一.编译优化 #pragma GCC optimize("O3") #pragma G++ optimize("O3") 预处理开O3优化 比 ...
- 使用layui iframe弹层,各弹层之前的传值问题
最近做一个后台管理系统,用到的layui,主要是使用它的弹层,但是各个弹层之前的传值经常容易搞晕,写个个博客记录一下,方便自己,也方便别人, 首先我的页面已经嵌套了好几个iframe页面了,嵌套了三个 ...
- linux运维、架构之路-linux基础优化
1.查看linux版本 cat /etc/redhat-release #CentOS release 6.9 (Final) ————>查看版本号 uname -m #x86_64 ————& ...
- docker 内时区和宿主机差8个小时,怎么办?
docker run -d -it --name tt -e TZ=Asia/Shanghai -p : api 使用-e参数指定时区
- 最大流 && 最小费用最大流模板
模板从 这里 搬运,链接博客还有很多网络流题集题解参考. 最大流模板 ( 可处理重边 ) ; const int INF = 0x3f3f3f3f; struct Edge { int from ...
- 【PowerOJ1741&网络流24题】最长递增子序列问题(最大流)
题意: 思路: [问题分析] 第一问时LIS,动态规划求解,第二问和第三问用网络最大流解决. [建模方法] 首先动态规划求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上升序列长度K. ...
- bootstrap-multiselect 设置单选无效(设置单选依然是复选框)
bootstrap-multiselect 的使用介绍:https://www.cnblogs.com/landeanfen/p/5013452.html bootstrap-multiselect ...
- 1.Windows下安装nginx
1. 到nginx官网http://nginx.org/上下载相应的安装包 下载进行解压,将解压后的文件放到自己心仪的目录下,我的解压文件放在了d盘根目录下,如下图所示: 进入window的cm ...