1. 包
定义
- 包是用来分门别类的管理各种不同程序的,类似于文件夹,建包有利于程序的管理和维护。
建包的语法格式
package com.itheima.javabean;
public class Student {
}
调用其他包下的程序的注意事项
- 如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。
- 如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包, 才可以访问!
- 如果当前程序中,要调用Java提供的程序,也需要先导包才可以使用;但是Java.lang包下的程序是不需要我们导包的,可以直接使用。
- 如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
2. String
定义
String代表字符串对象,可以用来封装字符串数据,并提供了很多操作字符串的方法。
String构造方法
构造方法 | 说明 |
public String(byte[] bytes, int offset, int length) | 将指定的字节数组(的指定部分)转成字符串 |
public String(byte[] bytes, String charsetName) | 将指定的字节数组转成字符串(通过指定码表转换) |
public String(byte[] bytes, int offset, int length, String charsetName) | 将指定的字节数组(一部分)转成字符串(通过指定码表转换) |
public String(char[] value) | 将char数组通过默认字符集转成字符串 |
public String(char[] value, int offset, int count) | 将char数组(一部分)转成字符串 |
public String(StringBuffer buffer) | 将StringBuffer类型的对象转成字符串 |
public String(StringBuilder builder) | 将StringBuilder类型的对象转成字符串 |
String两种创建对象方法的区别
- 以“”方式给出的字符串,只要字符串相同,无论在程序代码中出现几次,JVM 都只会建立一个String对象,并在字符串常量池中维护
- 字符串常量池(在堆空间里面): 当使用双引号创建字符串对象的时候,系统会检查该字符串是否存在字符串
- 常量池中
- 如果不存在:创建
- 如果存在:不会重新创建,而是直接复用
- 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
- 注意:对于引用数据类型,一定要区分什么是值,什么是引用
- new关键字代表的含义是在堆内存中开辟一个空间,每执行一次,都会开辟一个新的
- null代表的是没有引用(没有引用内存地址)
- 字符串在输出一个对象的时候,如果对象有值,则输出的是值,如果对象没有赋值,则输出默认的内容""(空字符)
- ""!= null两个东西含义不同
- "":内存地址已经存在(已经创建了对象,空间中没有存数据)
- null:内存中没有地址,仅仅只是起了一个变量名称(没有创建对象)
- 对于字符串来说:
- 如果要比较内存地址使用:==
- 如果要比较字符串的值(存储的数据): .equals()
String提供的常用方法
length() | 获取字符串的长度返回(就是字符个数) |
char charAt(int index) | 获取某个索引位置处的字符(值)返回 |
concat(String str) | 将指定的字符串连接到该字符串的末尾。(拼接两个字符串) |
toCharArray() | 将当前字符串转换成字符数组返回 |
equals(Object anObject) | 判断当前字符串与另一个字符串的内容一样(不忽略大小写,一样返回true |
equalsIgnoreCase(String anotherString) | 判断当前字符串与另一个字符串的内容是否一样(忽略大小写) |
substring(int beginIndex, int endIndex) | 根据传入开始和结束索引进行截取,得到新的字符串(包前不包后) |
substring(int beginIndex) | 根据传入开始的索引处截取,截取到末尾,得到新的字符串返回 |
replace(CharSequence target, CharSequence replacement) | 使用新值将字符串中的旧值替换,得到新的字符串 |
contains(CharSequence s) | 判断字符串中是否包含了某个字符串,如果包含则返回true,否则返回false |
startsWith(String prefix) | 判断字符串是否以某个字符串内容开头,开头返回true,反之false |
endsWith(String suffix) | 判断字符串是否是以指定字符串结尾,如果包含则返回true,否则返回false |
split(String regex) | 把字符串按照某个字符串内容分割,并返回字符串数组回来 |
index0f(int ch) | 获取指定字符串在原字符串中第一次出现(索引)的位置 |
lastIndex0f(int ch) | 获取指定字符串在原字符串中最后一次出现(索引)的位置 |
indexOf(String s) | 查找s在字符串中第一个出现的的索引位置,未查到返回-1 |
lastIndexOf(String s) | 查找s在字符串中最后出现的的索引位置,未查到返回-1 |
index0f(String str,int fromIndex) | 从指定的索引向后开始数,返回指定字符串的第一次出现的字符串中的索引,包含当前索引的位置出现的次数 |
lastIndexOf(String str,int fromIndex) | 从指定的索引向前数开始,返回指定子串的第一次出现的字符串中的索引,如果前面没有出现指定的字符串将返回-1 |
toLowerCase() | 将所有在此字符 String使用默认语言环境的规则,以小写 |
toUpperCase() | 将所有在此字符 String使用默认语言环境的规则大写。 |
trim() | 去除字符串两端的空格或者留白,字符串中间的不会消除 |
isEmpty() | 判断字符串是否为空。 为空返回true 不为空范围 false |
3. StringBuilder类和StringBuffer类
- StringBuilder(叫可变字符序列):线程不安全,用于单个线程。
- stringBuffer(也叫可变字符序列):线程安全,用于多个线程。
- StringBuilder类和StringBuffer类在进行方法调用之后,改变的是对象自身的数据。
- StringBuilder类和StringBuffer类方法几乎是一模一样,如果你学会了StringBuilder类的方法,则StringBuffer用法和StringBuilder完全一样。
- StringBuilder类和StringBuffer类必须通过new关键字来创建对象,它们遵循面向对象的规则。
StringBuilder常用的构造方法
方法名 | 说明 |
public StringBuilder() | 构造一个没有字符的字符串构建器,初始容量为16个字符。 |
public StringBuilder(String str) | 构造一个初始化为指定字符串内容的字符串构建器。 |
StringBuilder的常用方法
方法名 | 说明 |
length() | 获取长度 |
capacity() | 获取容器的长度 |
toString() | 将StringBuilder类型的变量转成String类型。 |
append(String str) | 将指定的字符串追加到此字符序列中,直接在原对象上进行追加操作 |
charAt(int index) | 获取指定索引处的字符。 |
delete(int start, int end) | 删除指定开始索引到结束索引之间的值。(包前不包后) |
deleteCharAt(int index) | 删除指定索引处的值。 |
setCharAt(int index,char ch) | 修改指定位置的数据值 |
insert(int offset, String str) | 向指定索引位置处插入字符串。 |
replace(int start, int end, String str) | 用指定的String中的字符替换掉指定的开始索引到结束索引之间的字符串。(包前不包后) |
reverse() | 翻转StringBuilder中的数据,反转字符串 |
4. StringBuilder类、StringBuffer类和String类什么时候使用?
String:最常用
- StringBuilder:效率最高
- StringBuffer:如果将来是在进行大批量的字符串拼接,则效率高于String ,如果是小批量的字符串拼接,String效率高于StringBuffer
- 当我们如果字符串需要经常动态变化的时候由于String自身值不可变,所以通常会使StringBuilder或者StringBuffer