💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # java的API Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。object类有构造方法 接口不继承object类 ## equals equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。 ~~~ /* 描述人这个类,并定义功能根据年龄判断是否是同龄人 由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法 在方法体中根据类的属性值进行比较 */ class Person extends Object{ int age ; //复写父类的equals方法,实现自己的比较方式 public boolean equals(Object obj) { //判断当前调用equals方法的对象和传递进来的对象是否是同一个 if(this == obj){ return true; } //判断传递进来的对象是否是Person类型 if(!(obj instanceof Person)){ return false; } //将obj向下转型为Perosn引用,访问其属性 Person p = (Person)obj; return this.age == p.age; } } ~~~ 注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。 ## toString toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 ~~~ class Person extends Object{ int age ; //根据Person类的属性重写toString方法 public String toString() { return "Person [age=" + age + "]"; } } ~~~ # 简介 java.lang.String类代表字符串 java程序中所有的字符串字面值(比如: "abc")都是这个类的实现,就算没有new也算是 **字符串特点** * 字符串内容永远不可变 * 字符串可以共享使用 * 效果上相当于`char[]`字符数组,但是底层原理是`byte[]`字节数组 三种构造方法 ~~~ public String(): 创建一个空白字符串,不含有任何内容 public String(char[] array): 根据字符数组的内容来创建对应的字符串 public String(byte[] array): 根据字节数组的内容,来创建对应的字符串 一种直接创建 String str = "hello"; ~~~ # 例子 ~~~ //空参构造 String str1 = new String(); System.out.println("第一个字符串:" + str1); //根据字符数组创建字符串 char[] charArray = {'A', 'B', 'C'}; String str2 = new String(charArray); System.out.println("第二个字符串:" + str2); //根据字节数组创建字符串 byte[] byteArray = {97, 98, 99}; String str3 = new String(byteArray); System.out.println("第三个字符串:" + str3); ~~~ # 常量池 字符串常量池,程序中直接写上的双引号字符串就在字符串常量池中 ~~~ String str1 = "abc"; String str2 = "abc"; char[] charArray = {'a', 'b', 'c'}; String str3 = new String(charArray); System.out.println(str1 == str2); //true System.out.println(str1 == str3); //false System.out.println(str2 == str3); //false ~~~ 如果是字符数组的话,是常量池引用地址到字节数组的 ![](images/screenshot_1567934025057.png) ## 转换编码 ~~~ parameter = new String(parameter.getBytes("iso8859-1"),"utf-8"); ~~~ ## String类的特点 String类对象有两种实例化方式: * 直接赋值: 只开辟一块内存空间,可以自动入池 * 构造方法: 开辟两块堆内存空间,不会自动入池,使用intern()手工入池; 任何一个字符串都是String类的匿名对象 字符串一旦声明则不可改变,可以改变的只是String类对象的引用 # 方法 String: 字符串类,字符串是常量;它们的值在创建之后不能更改 方法 ~~~ boolean equals(Object obj) 判断两个字符串中的内容是否相同 boolean equalsIgnoreCase(String str) 判断两个字符串中的内容是否相同, 忽略大小写 boolean contains(String str) 判断该字符串中 是否包含给定的字符串 boolean startsWith(String str) 判断该字符串 是否以给定的字符串开头 boolean endsWith(String str) 判断该字符串 是否以给定的字符串结尾 boolean isEmpty() 判断该字符串的内容是否为空的字符串 "" int length() 获取该字符串的长度 char charAt(int index) 获取该字符串中指定位置上的字符 String substring(int start) 从指定位置开始,到末尾结束,截取该字符串,返回新字符串 String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串,返回新字符串 int indexOf(int chr ) 获取给定的字符,在该字符串中第一次出现的位置 int indexOf(String str) 获取给定的字符串,在该字符串中第一次出现的位置 int indexOf(int chr,int fromIndex) 从指定位置开始,获取给定的字符,在该字符 byte[] getBytes() 把该字符串 转换成 字节数组 char[] toCharArray() 把该字符串 转换成 字符数组 String replace(char old,char new) 在该字符串中,将给定的旧字符,用新字符替换 String replace(String old,String new) 在该字符串中, 将给定的旧字符串,用新字符串替换 String trim() 去除字符串两端空格,中间的不会去除,返回一个新字符串 String toLowerCase() 把该字符串转换成 小写字符串 String toUpperCase() 把该字符串转换成 大写字符串 int indexOf(String str,int fromIndex) 从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置 ~~~ # intern 得到字符串对象后,通过调用intern(),判断现有的字符串常量池中是否已经存在了当前内容的字符串. 如果存在,则直接引用现成的字符串 ~~~ String s1 = "hello"; String s3 = new String("hello"); //String s2 = s3.intern(); String s2 = s1.intern(); System.out.println(s1 == s2); //true System.out.println(s3 == s2); //false ~~~ 1. 直接定义字符串变量的时候赋值,如果表达式右边只有字符串常量,那么就是把变量存放在常量池里面。 2. new出来的字符串是存放在堆里面。 3. 对字符串进行拼接操作,也就是做"+"运算的时候,分2中情况: i.表达式右边是纯字符串常量,那么存放在栈里面。 ii.表达式右边如果存在字符串引用,也就是字符串对象的句柄,那么就存放在堆里面 # 字符串常量池 jdk6: 方法区(或永久代) jdk7: 堆空间 jdk8: 元空间 # 与其他结构的转换 * String->包装类: 调用包装类`Xxxx`的`parseXxx(String s)`方法 * 包装类,基本数据类型->string: 调用String的`valueOf(Xxx xxx);` * String与字节数组的转换 ~~~ String->字节数组: 调用String类的getBytes() 字节数组->String: new String(byte[] buffer, startIndex, length) ~~~ * String与字符数组的转换 ~~~ String->字符数组: 调用String类的toCharArray() 字符数组->String: new String(char[] cbuf, startIndex, length) ~~~