JavaSE---常用API | 黄乔国JAVA

7 篇文章 0 订阅

Java常用API

  • String类
  • 工具类
  • 正则类
  • 日期类

String类

字符串是Java使用很频繁的一种数据类型.

创建string

使用双引号创建字符串

使用new关键字创建字符串

String常用API

public char charAt(int index)

返回char指定下标的值。 指数范围为0至length() - 1 。 该序列的第一个char值在索引0 ,下一个索引为1 ,依此类推,与数组索引一样。

如果下标越界: 会抛出IndexOutOfBoundsException 异常.

public int length()

求字符串得长度

public boolean isEmpty()

判断字符串是否是空字符串.

public int compareTo(String anotherString)

两个字符串得比较.
如果返回0,则表示两个字符串相等
返回-1,说明此字符串比参数字符串小
返回1,说明此字符串比参数字符串大

public int compareToIgnoreCase(String str)

和compareTo一致,该方法不区分大小写.

public String concat(String str)

将指定的字符串连接到该字符串的末尾。此方法代替用”+”链接字符串.

public boolean contains(CharSequence s)

判断字符串中是否包含相应得字符,包含:true,否则:false

public boolean contentEquals(CharSequence cs)

比较当前字符串和对应字符序列是否相等(比较两个字符串是否相等)

public static String copyValueOf(char[] data,int offset,int count)

将字符数组指定范围转换成字符串

public boolean endsWith(String suffix)

检测字符串后缀

public boolean equals(Object anObject)

字符串得比较方法,同compareTo

public int indexOf(String str)

在String中搜索str,如果有则返回对应得下标,否则返回-1

public int indexOf(String str, int fromIndex)

同上,指定开始下标搜索

public int lastIndexOf(String str)

从右向左找对应得字符串

public int lastIndexOf(String str, int fromIndex)

同上,指定了开始下标

public String replace(CharSequence target,CharSequence replacement)

在字符串中将target替换成 replacement

public String replaceAll(String regex, String replacement)

将满足regex规则得字符串,全部替换成replacement

public String[] split(String regex)

将有分隔符规律得字符串分割成数组

public boolean startsWith(String prefix)

检测字符串以什么开始

public String substring(int beginIndex,int endIndex)

截取指定返回得字符串

注意不会截取:endIndex

public char[] toCharArray()

将字符串转换成字符串数组

public String toLowerCase()

转换成小写

public String toUpperCase()

转换成大写

public String trim()

去除字符串前后得空格

public static String valueOf(int i)

将整数转换成字符串

深入string

String不能被继承

从源码中可以看出string类被final关键字修饰,所以不能被继承,内部得成员变量和属性都被final修饰.

String字符串是不变的

String对象一旦创建后,就不能被修改了,从源码上来看string其实是有字符数组组成:

而且是私有的,并没有对应的setter方法,所以正是因为如此,string对象一旦生成是不可改变的.
那我们通常改变的字符串是怎么发生的呢?
我们随便看一个subString的源码:

最终有一个new String(…),说明什么? 会产生一个新的对象.

String常量池

我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串.
Java中的常量池,实际上分为两种形态:静态常量池运行时常量池
所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。

如:
String a = “chenssy”;
String b = “chenssy”;
String c = new String(“chenssy”);

new关键字一定会产生一个对象chenssy(注意这个chenssy和上面的chenssy不同),同时这个对象是存储在堆中。所以上面应该产生了两个对象:保存在栈中的c和保存堆中chenssy。但是在Java中根本就不存在两个完全一模一样的字符串对象。故堆中的chenssy应该是引用字符串常量池中chenssy。所以c、chenssy、池chenssy的关系应该是:c—>chenssy—>池chenssy。

==和equals的区别

==比较内存地址
Equals比较值

String、StringBuffer、StringBuilder的区别

(1)可变与不可变:String是不可变字符串对象,StringBuilder和StringBuffer是可变字符串对象(其内部的字符数组长度可变)。

(2)是否多线程安全:String中的对象是不可变的,也就可以理解为常量,显然线程安全。StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是非线程安全的。

(3)String、StringBuilder、StringBuffer三者的执行效率:
StringBuilder > StringBuffer > String 当然这个是相对的,不一定在所有情况下都是这样。比如:
String str = “hello”+ “world”
的效率就比
StringBuilder st = new StringBuilder().append(“hello”).append(“world”)要高。
因此,这三个类是各有利弊,应当根据不同的情况来进行选择使用:
当字符串相加操作或者改动较少的情况下,建议使用 String str="hello"这种形式;
当字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。

包装类

基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

包装类主要提供了两大类方法:
1. 将本类型和其他基本类型进行转换的方法
2. 将字符串和本类型及包装类互相转换的方法

Integer常用方法

装箱与拆箱

基本数据类型和包装类型之间会经常转换,这就涉及到装箱与拆箱
Jdk1.5之后就提供自动的装箱和拆箱

装箱:

把基本数据类型转换成包装类,使其拥有对象的特性,这就叫装箱.
又分为手动装箱和自动装箱.

拆箱:

和装箱相反,将包装类转换成基本数据类型,分为手动拆箱和自动拆箱

基本数据类型转换成String

包装类的toString()方法

String的valueOf方法

加上空字符串

String转换成基本数据类型

调用包装类的parseXxx方法

调用包装类的valueOf方法

日期处理

Calendar

主要用于获取一些时间点

Date

当前时间


获取毫秒值

Before

After

Timestamp


Math类

Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miracle_PHP|JAVA|安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值