推荐设备MORE

免费的情话小程序—企业官网

免费的情话小程序—企业官网

行业知识

Java常见类

日期:2021-02-18
我要分享

Java常见类-String类,Java

标识符串有关的类:String

String类:意味着标识符串,Java 程序中的全部标识符串字面上值(如 abc )都作 因此类的案例完成。

String是一个final类,意味着不能变的标识符编码序列 当标识符串再次取值时,必须再次特定运行内存地区,不可以应用原来的value开展取值 当对目前的标识符串开展联接实际操作时,也必须再次特定运行内存地区取值,都不能 在原来的value勤奋行取值 当启用String的replace()方式改动特定标识符或标识符串时,也必须再次特定运行内存地区开展取值 换句话说对String的一切改动全是再次的造一个
标识符串是变量定义,用双引号造成来表明。他们的值在建立以后不可以变更 String內部界定了final char value[] 用以储存标识符串数据信息 String完成了Serializable插口,表明标识符串是适用编码序列化的,完成了 Comparable插口,表明String能够较为尺寸 根据字面上量的方法(差别于new)给一字符串取值,这时的标识符串的值是申明在标识符串变量定义池中的 标识符串变量定义池不是会储存同样內容的标识符串
public void test1(){
 String s1 = abc //字面上量的方法
 String s2 = abc 
 System.out.println(s1 == s2);// ture , 较为的是s1和s2的详细地址值
 s1 = hello 
 System.out.println(s1); // hello
 System.out.println(s2); // abc
 String s3 = abc 
 s3 += def 
 System.out.println(s3); // abcdef
 System.out.println(s2 == s3); // false , 这时的s2和s3的详细地址值早已不一样

根据字面上量界定的方法:这时的s1和s2的数据信息是申明在方式区的标识符串变量定义池中 根据new + 结构器的方法:这时的s3和s4储存的详细地址,是数据信息在堆室内空间中开拓室内空间之后相匹配的详细地址值
 public void test2(){
 String s1 = Java 
 String s2 = Java 
 String s3 = new String( Java 
 String s4 = new String( Java 
 System.out.println(s1 == s2); // true
 System.out.println(s1 == s3); // false
 System.out.println(s1 == s4); // false
 System.out.println(s3 == s4); // false

Person p2 = new Person( Tom ,18); System.out.println(p1.name.equals(p2.name)); // true , String重新写过了equals方式,这时较为的便是內容了 System.out.println(p1.name == p2.name); // true , 2个目标里边還是字面上量界定的方法取值

注:2个目标里边還是字面上量界定的方法取值

招聘面试题

String s = new String( abc )方法建立目标,以内存中建立了好多个目标?

2个,一个是堆室内空间的new的构造,一个是char[]相匹配的变量定义池中的数据信息 abc

2. 标识符串的特点

关键:

变量定义与变量定义的拼凑結果在变量定义池中,且变量定义池中不容易存有同样內容的变量定义 要是在其中一个是自变量,結果就在堆中 假如拼凑的結果启用intern()方式,回到值便是在变量定义池中

public void test3(){
 String s1 = Java 
 String s2 = Python 
 String s3 = JavaPython 
 String s4 = Java + Python 
 String s5 = s1 + Python 
 String s6 = s1 + s2;
 System.out.println(s3 == s4); // true
 System.out.println(s3 == s5); // false
 System.out.println(s4 == s5); // false
 System.out.println(s3 == s6); // false
 String s7 = s5.intern();
 System.out.println(s7 == s3); //true

非常留意:当 final String s1 = “java”,这一也就非常于一个变量定义了

3. 招聘面试题:

good and best

这儿能够参照以前的Java的值传送

若在scr前边加一个this,状况会是如何?

<.atguigui.exer; * @author MD * @create public class StringTest { String str = new String( good char[] ch = {'t','e','s','t'}; public void change(String str, char ch[]){ this.str = test ok ch[0] = 'b'; public static void main(String[] args) { StringTest ex = new StringTest(); ex.change(ex.str,ex.ch); System.out.println(ex.str); System.out.println(ex.ch); // test ok // best
4. String常见的方式

留意String的不能变性,原标识符不会改变

int length():回到标识符串的长短: return value.length char charAt(int index): 回到某数据库索引处的标识符return value[index] boolean isEmpty():分辨是不是是空标识符串:return value.length == 0 String toLowerCase():应用默认设置語言自然环境,将 String 中的全部标识符变换为小写 String toUpperCase():应用默认设置語言自然环境,将 String 中的全部标识符变换为英文大写 String trim():回到标识符串的团本,忽视前导空白页和尾部空白页 boolean equals(Object obj):较为标识符串的內容是不是同样 boolean equalsIgnoreCase(String anotherString):与equals方式相近,忽视大 小写 String concat(String str):将特定标识符连接起来收到此标识符串的末尾。 等额的于用“+” pareTo(String anotherString):较为2个标识符串的尺寸 涉及到到标识符串排列 String substring(int beginIndex):回到一个新的标识符串,它是此标识符串的从 beginIndex刚开始提取到最终的一身高标识符串。 String substring(int beginIndex, int endIndex) :回到一个新标识符串,它是此字 符串从beginIndex刚开始提取到endIndex(不包括)的一身高标识符串。 boolean endsWith(String suffix):检测此标识符串是不是以特定的后缀名完毕 boolean startsWith(String prefix):检测此标识符串是不是以特定的作为前缀刚开始 boolean startsWith(String prefix, int toffset):检测此标识符串从特定数据库索引刚开始的 子标识符串是不是以特定作为前缀刚开始 boolean contains(CharSequence s):当且仅当此标识符串包括特定的 char 值编码序列 时,回到 true,也便是标识符串A中是不是包括标识符串B int indexOf(String str):回到特定子标识符串在此标识符串中第一次出現处的数据库索引 int indexOf(String str, int fromIndex):回到特定子标识符串在此标识符串中第一次出 现处的数据库索引,从特定的数据库索引刚开始 int lastIndexOf(String str):回到特定子标识符串在此标识符串中最右侧出現处的数据库索引 int lastIndexOf(String str, int fromIndex):回到特定子标识符串在此标识符串中最终 一次出現处的数据库索引,从特定的数据库索引刚开始反方向检索 注:indexOf和lastIndexOf方式假如找不到全是回到-1 String replace(char oldChar, char newChar):回到一个新的标识符串,它是 根据用 newChar 更换此标识符串抽出现的全部 oldChar 获得的。 String replace(CharSequence target, CharSequence replacement):使 用特定的字面上值更换编码序列更换此标识符串全部配对字面上值总体目标编码序列的子标识符串。 String replaceAll(String regex, String replacement) : 应用给 定 的 replacement 更换此标识符串全部配对给定的正则表达式表述式的子标识符串。 String replaceFirst(String regex, String replacement) : 应用给 定 的 replacement 更换此标识符串配对给定的正则表达式表述式的第一身高标识符串。 boolean matches(String regex):告之此标识符串是不是配对给定的正则表达式表述式 String[] split(String regex):依据给定正则表达式表述式的配对分拆此标识符串。 String[] split(String regex, int limit):依据配对给定的正则表达式表述式来分拆此 标识符串,数最多不超出limit个,假如超出了,剩余的所有都放进最终一个原素中。 5. String与基本数据信息种类变换

String --- 基本数据信息种类、包裝类

启用包裝类的静态数据方式:parseXxx(str)

基本数据信息种类、包裝类 --- 标识符串

启用String的valueOf(xxx)
public void test2(){
 String str = 123 
 int num = Integer.parseInt(str);
 String str1 = String.valueOf(num);

String --- char[] : 启用String的toCharArray()

char[] --- String: 启用String的结构器

public void test3(){
 String str = asdf123 
 char[] charArray = str.toCharArray();
 for (int i = 0; i charArray.length; i++) {
 System.out.println(charArray[i]);
 String str1 = new String(charArray);
 System.out.println(str1);

编号:String --- byte[] :启用String的getBytes()
编解码:byte[] --- String : 启用String的结构器

/**
 * 编号:标识符串 -- 字节数 (看得懂的---- 不明白的二进制数据信息)
 * 编解码:字节数 --- 标识符串(不明白的二进制数据信息---- 看得懂的)
 * @throws UnsupportedEncodingException
 @Test
 public void test4() throws UnsupportedEncodingException {
 String str = abc123您好 
 byte[] bytes = str.getBytes(); // 应用默认设置的标识符集开展变换 UTF-8 编号
 System.out.println(Arrays.toString(bytes));
 String str1 = abc123您好 
 byte[] bytes1 = str1.getBytes( gbk // 特定编号文件格式
 System.out.println(Arrays.toString(bytes1));

System.out.println( --------------------- String str2 = new String(bytes); // 编解码,应用的默认设置的文件格式 System.out.println(str2); String str3 = new String(bytes1 , gbk // 编解码,应用的特定的文件格式 System.out.println(str3);
6. StringBuffer、StringBuilder ?

招聘面试题:比照String、StringBuffer、StringBuilder ?

String(JDK1.0):不能变标识符编码序列 ,高效率最少 StringBuffer(JDK1.0):可变性标识符编码序列、高效率低、进程安全性 同歩 StringBuilder(JDK 5.0):可变性标识符编码序列、高效率高、进程躁动不安全 最底层都应用char[]储存

留意:做为主要参数传送得话,方式內部String不容易更改其值,StringBuffer和StringBuilder 会更改其值

源代码剖析:
String str = new String(); // char[] value = new char[0];
String str1 = new String( abc // char[] value = new char[]{'a','b','c'};
StringBuffer sb1 = new StringBuffer(); // char[] value = new char[16];最底层建立一个长短16的char型数字能量数组
StringBuffer sb1 = new StringBuffer( abc // char[] value = new char[ abc .length()+16];

难题1:

留意这一是里边 里边数据信息的长短,

public void test5(){
 StringBuffer sb1 = new StringBuffer();
 System.out.println(sb1.length()); // 0
 StringBuilder sb2 = new StringBuilder( abc 
 System.out.println(sb2.length()); // 3

难题2:

扩充难题,假如要加上的数据信息放不下了,那么就必须扩充数字能量数组,默认设置状况下,扩充为原先的2倍+2,将原来数字能量数组中的数据信息拷贝到新的数字能量数组中来

String ----- StringBuffer、StringBuilder : 启用StringBuffer、StringBuilder结构器便可以了

StringBuffer、StringBuilder ----- : 启用String的结构器

StringBuffer类的常见方式和StringBuilder相近

StringBuffer append(xxx):出示了许多的append()方式,用以开展标识符串拼凑 StringBuffer delete(int start,int end):删掉特定部位的內容 StringBuffer replace(int start, int end, String str):把[start,end)部位更换为str StringBuffer insert(int offset, xxx):在特定部位插进xxx StringBuffer reverse() :把当今标识符编码序列大逆转 public int indexOf(String str) public String substring(int start,int end) public int length() public char charAt(int n ) public void setCharAt(int n ,char ch)

小结:

增 :append 删:delete 改:setCharAt,replace 查:charAt 插进:insert 长短:length

招聘面试题:

 public void testStringBuffer(){
 String str = null;
 StringBuffer sb = new StringBuffer();
 sb.append(str);
 System.out.println(sb.length()); // 4
 System.out.println(sb); // null 这一是标识符串null
 StringBuffer sb1 = new StringBuffer(str); // 抛出现异常 NullPointerException
 System.out.println(sb1);

dengb.TechArticleJava常见类-String类,Java 标识符串有关的类:String String类:意味着标识符串,Java 程序中的全部标识符串字面上值(如 abc )都作 因此类的案例完成。...