文章目录
- 1、Object类
- 1.1 Tostring
- 1.2 equals
- 1.3 clone
- 2、Objects类
- 2.1 equals方法
- isNull 与nonNull
- 3、包装类
- 3.1 常见操作
- 4、StringBuilder
- 5、StringBuffer
- 6、StringJoiner
1、Object类
所有类的基类。
1.1 Tostring
public String toString()
返回对象的字符串表示形式。 通常, toString方法返回一个“文本表示”此对象的字符串。 结果应该是简洁但信息丰富的表示,便于人们阅读。 建议所有子类都覆盖此方法。
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“ @ ”以及对象的哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于值的字符串: getClass().getName() + '@' + Integer.toHexString(hashCode())
一般的类,我们都希望返回类的具体内容,所以我们可以重写该方法。
一般.tostring() 可以省略,我们直接输出对象 其实就是调用的该方法。
idea中,在类中,我们直接输入tostring 就会显示,可以自动生成。
1.2 equals
eauals与字符串的不同,字符串是为了比较内容,但是在类中,我们是比较地址。
与==号的作用相同,该类的出现是为了让我们可以重写equals方法,定义自己的比较原则,IDEA中,我们输入equals也会自动生成比较内容的方法重写.
B b = new B(new int[]{1,2});B b2 = new B(new int[]{1,2});System.out.println(b==b2);//falseSystem.out.println(b.equals(b2));//true
1.3 clone
clone 是克隆的方法,分为浅克隆和深克隆。
clone在object中是projected的,只能在本类,本包以及该类的子类下使用,但并不代表我们可以在子类的实例中使用,所以如果想要在子类的实例中使用,需要我们在子类中去实例化clone方法。
package com.cky.fx;import java.util.Arrays;public class B implements Cloneable{private int[] arr;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}public int[] getArr() {return arr;}public B() {}public B(int[] arr) {this.arr = arr;}public void setArr(int[] arr) {this.arr = arr;}@Overridepublic String toString() {return "B{" +"arr=" + Arrays.toString(arr) +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;B b = (B) o;return Arrays.equals(arr, b.arr);}@Overridepublic int hashCode() {return Arrays.hashCode(arr);}
}
```java
package com.cky.fx;import java.util.Arrays;public class Main {public static void main(String[] args) throws CloneNotSupportedException {String[] originalArray = {"1","2","3"};// 使用clone方法进行克隆String[] clonedArray = originalArray.clone();// 修改原始数组的第一个元素originalArray[0] = "99";//false 地址不相同System.out.println(originalArray.equals(clonedArray));// 输出两个数组的内容System.out.println("Original Array: " + Arrays.toString(originalArray));System.out.println("Cloned Array: " + Arrays.toString(clonedArray));//false//Original Array: [99, 2, 3]//Cloned Array: [1, 2, 3]B b = new B(new int[]{1,2});B b2 = new B(new int[]{1,2});System.out.println(b==b2);System.out.println(b.equals(b2));System.out.println(b);B clone = (B)b.clone();System.out.println(b.getArr());System.out.println(clone.getArr());}
}
结果:
false
Original Array: [99, 2, 3]
Cloned Array: [1, 2, 3]
false
true
B{arr=[1, 2]}
[I@5fd0d5ae
[I@5fd0d5ae
迷惑:
2、Objects类
Objects 是一个工具类,提供了许多静态方法给我们使用
2.1 equals方法
为什么objects还需要再重写一个equals方法呢?
字符串有其对应的equals方法,Objects的方法与其什么不同呢?
来看一个例子
String s1=null;String s2="a";
// System.out.println(s1.equals(s2)); 会报空指针异常System.out.println(Objects.equals(s1,s2));
我们可以看下Objects类的equals源码:
首先会比较两个对象地址是否相同,相同直接返回true,其次会判断看a是否为空,这时候就避免了空指针异常。
isNull 与nonNull
String s1=null;String s2="a";
// System.out.println(s1.equals(s2)); 会报空指针异常System.out.println(Objects.equals(s1,s2));//fasleSystem.out.println(Objects.isNull(s1));//true//与 s1==null 一样System.out.println(Objects.nonNull(s2));//true//与s1!=null 一样
3、包装类
比如集合和泛型 就需要引用数据类型 不能接收基本数据类型
3.1 常见操作
Integer a1=Integer.valueOf(12);//自动装箱功能Integer a=12;//效果与第一个一样//自动拆箱功能int b=a;//将基本类型 变为String数据类型System.out.println(Integer.toString(a)+1);//121 而不是13//将字符串 转变为基本数据类型 使用valueof 即可 记住这一个就行String s="123";System.out.println(Integer.parseInt(s)+1);System.out.println(Integer.valueOf(s)+1);String s1="123.1";System.out.println(Double.parseDouble(s1));System.out.println(Double.valueOf(s1));
结果
:
121
124
124
123.1
123.1
4、StringBuilder
StringBuilder允许链式操作,即append之后返回的仍然是StringBuilder的该对象,可以一直append.它是一个可变的字符串对象,如果一个字符串需要频繁拼接修改,使用StringBuilder比String效率高的多。
toString()方法
,一般我们接收的都是String类型的数据,所以在我们拼接操作完成之后,需要将StringBuilder转换为String对象。
System.out.println(sb.append(1).append("java"));System.out.println(sb.reverse());System.out.println(sb);System.out.println(sb.length());
1231java
avaj1321
avaj1321
8
5、StringBuffer
其实与StringBuilder功能 是一样的,但是StringBuffer的线程是安全的,而StringBuilder的线程是不安全的,如果是多个人同时操作就要使用StringBuffer
6、StringJoiner
可以方便定义 以什么间隔符拼接,以什么开头,以什么结尾。
package com.cky.Objectsclass;import java.util.Objects;
import java.util.StringJoiner;public class Equals {public static void main(String[] args) {int arr[] ={11,22,33};System.out.println(getString(new int[]{11,22,33}));//[11,22,33]}public static String getString(int[] arr){StringJoiner sb1=new StringJoiner(",","[","]");if (arr==null)return null;for(int i=0;i<arr.length;i++){sb1.add(arr[i]+"");}return sb1.toString();}
}