Object 类

java.lang.Object类是Java语言中的根类(万类之源),即所有类的父类(超类)。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有特别指定父类, 那么默认则继承自Object类。

public class MyClass /*extends Object*/ {// ...
}

public class Object类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

toString方法

public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。


getClass().getName()+'@'+Integer.toHexString(hashCode())
//toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

返回:
该对象的字符串表示形式。

覆盖重写

public class Person {  private String name;private int age;@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}// 省略构造器与Getter Setter
}

equals方法

public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。

import java.util.Objects;public class Person {   private String name;private int age;@Overridepublic boolean equals(Object o) {// 如果对象地址一样,则认为相同if (this == o)return true;// 如果参数为空,或者类型信息不一样,则认为不同if (o == null || getClass() != o.getClass())return false;// 转换为当前类型Person person = (Person) o;// 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果return age == person.age && Objects.equals(name, person.name);}
}

在IntelliJ IDEA中,可以使用Code菜单中的Generate…选项,也可以使用快捷键alt+insert,并选择equals() and hashCode()进行自动代码生成。

JDK7中的 java.lang.Objects 工具类

在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。

public static boolean equals(Object a, Object b)判断两个对象是否相等。

public static boolean equals(Object a, Object b) {  return (a == b) || (a != null && a.equals(b));
}

java.lang.System 类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:

public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。

currentTimeMillis方法

验证for循环打印所需要使用的时间(毫秒)

public class SystemTest1 {public static void main(String[] args) {long start = System.currentTimeMillis();for (int i = 1; i <= 10000000; i++) {System.out.println(i);}long end = System.currentTimeMillis();System.out.println("共耗时毫秒:" + (end - start));}
}

arraycopy方法

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)将数组中指定的数据拷贝到另一个数组中。

数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:

参数序号 参数名称 参数类型 参数含义
1 src Object 源数组
2 srcPos int 源数组索引起始位置
3 dest Object 目标数组
4 destPos int 目标数组索引起始位置
5 length int 复制元素个数

import java.util.Arrays;public class Demo11SystemArrayCopy {public static void main(String[] args) {int[] src = new int[]{1,2,3,4,5};int[] dest = new int[]{6,7,8,9,10};System.arraycopy( src, 0, dest, 0, 3);for (int a:src) {System.out.println(a);}System.out.println("");for (int b:dest) {System.out.println(b);}/*代码运行后:两个数组中的元素发生了变化src数组元素[1,2,3,4,5]dest数组元素[1,2,3,9,10]*/}
}

java.lang.StringBuilder 类

普通操作:字符串拼接

public class StringDemo {public static void main(String[] args) {String s = "Hello";s += "World";System.out.println(s);}
}

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。为了解决这一问题,引入java.lang.StringBuilder类:一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容为 “start” 的字符串的生成器对象,则该方法调用 z.append(“le”) 将使字符串生成器包含 “startle”,而 z.insert(4, “le”) 将更改字符串生成器,使之包含 “starlet”。

通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

StringBuilder构造方法

public StringBuilder()构造一个空的StringBuilder容器。
public StringBuilder(String str)构造一个StringBuilder容器,并将字符串添加进去。

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb1 = new StringBuilder();System.out.println(sb1); // (空白)// 使用带参构造StringBuilder sb2 = new StringBuilder("itcast");System.out.println(sb2); // itcast}
}

普通方法

  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
  • public String toString():将当前StringBuilder对象转换为String对象。

append方法

append方法具有多种重载形式,可以接收任意类型的参数。任何数据作为参数都会将对应的字符串内容添加到StringBuilder中。例如:

public class Demo02StringBuilder {public static void main(String[] args) {//创建对象StringBuilder builder = new StringBuilder();//public StringBuilder append(任意类型)StringBuilder builder2 = builder.append("hello");//对比一下System.out.println("builder:"+builder);System.out.println("builder2:"+builder2);System.out.println(builder == builder2); //true// 可以添加 任何类型builder.append("hello");builder.append("world");builder.append(true);builder.append(100);// 在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。// 这种时候,我们就可以把代码现在一起,如append方法一样,代码如下//链式编程builder.append("hello").append("world").append(true).append(100);System.out.println("builder:"+builder);}
}

注意:StringBuilder已经覆盖重写了Object当中的toString方法。

toString方法

通过toString方法,StringBuilder对象将会转换为不可变的String对象。如:

public class Demo16StringBuilder {public static void main(String[] args) {// 链式创建StringBuilder sb = new StringBuilder("Hello").append("World").append("Java");// 调用方法String str = sb.toString();System.out.println(str); // HelloWorldJava}
}

Java: Object类,System类,StringBuilder类相关推荐

  1. 进阶03 System、StringBuilder类

    System类 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static long c ...

  2. Java String、StringBuffer、StringBuilder类解析

    String.StringBuffer.StringBuilder类解析 概述 String类:代表字符串. 特点 String实现了Serializable接口,表示String是可序列化的 实现了 ...

  3. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  4. Java笔记(一)—StringBuilder类

    1.StringBuilder类概述 StringBuilder是一个可变的字符串类,主要指的是StringBuilder对象 中的内容是可变的.与之相比String对象的内容是不变的. 2.Stri ...

  5. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础--数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  6. Java黑皮书课后题第10章:**10.28(实现StringBuilder类)在Java库中提供了StringBuilder类。给出你对下面方法的实现(将新类命名为MyStringBuilder2)

    题目 代码 public class Test28_MyStringBuilder2 {String s = "";// 无参构造方法public Test28_MyStringB ...

  7. Java中的StringBuilder类功能详解

    字符串是Java程序中最常用的一种数据结构之一.在Java中的String类已经重载的"+".也就是说,字符串可以直接使用"+"进行连接,如下面代码所示: St ...

  8. 【Java】字符串的理解与运用以及StringBuffer 和 StringBuilder 类

    常见字符串求解: 1.长度 用于获取有关对象的信息的方法称为访问器方法. String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数. 2.字符串索引位置的字符 3.提取 ...

  9. 普歌-码灵团队-System类,StringBuilder类的常用方法详解

    System类,StringBuilder类的常用方法详解(java基础必掌握)java面试必问) System类的介绍: System类中常用方法: 1.System.currentTimeMill ...

  10. C#OOP之十五 String类StringBuilder类

    String类的概述 初次看到String这个词,大家应该都很熟悉.有的同学就会想到:它不就是C#中的一个关键字吗?我们已经接触过了啊,它就是一个数据类型而已,能有何大用?也有细心的同学会发现:这个S ...

最新文章

  1. 南通市公积金信息系统goldengate复制软件采购
  2. Matlab | Matlab从入门到放弃(4)——样本均值
  3. Mac搭建Lua运行环境
  4. html转word 时 字体颜色,【Web前端问题】文字大小和颜色随着热度改变如何做?...
  5. ros构建机器人运动学模型_机器人开源控制软件 OROCOS
  6. JS面向对象系列之一[prototype,原型]
  7. 拓扑排序Topological Sorting
  8. python设置很大的刻度_【Matplotlib】设置刻度(1)
  9. 如何高效构建融资担保场景化分析体系
  10. 移动应用众包测试综述
  11. 在工作中历练思考力,行动力,表达力
  12. Windows 10 企业版许可证即将过期怎么办
  13. h5 微信公众号获取当前位置
  14. ORA-39181: Only partial table data may be exported due to fine grain access control on “OE“.“PURCHAS
  15. 智能学习硬件小程序开发,提升学习感受
  16. 闲鱼卖家待发货在哪看
  17. ORAN专题系列-21:5G协议栈功能切分选项与O-RAN白盒化
  18. 如何字体文件拿数字文件_如何创建和管理数字家庭文件
  19. 572 另一棵树的子树
  20. 5年亏炒股指亏1600万,最后才知道Q群里除了他全是骗子

热门文章

  1. SX、LX、ZX、LH
  2. 神经网络系列之五 -- 线性二分类的方法与原理
  3. 怎么看协议属于哪一层?
  4. linux上查看cap文件,如何使用tcpdump在Mac OS X上读取.cap数据包捕获文件 | MOS86
  5. 全球及中国充电桩行业建设动态与竞争格局展望报告2022版
  6. ros系列-解决节点处理bag文件,输出无内容问题
  7. H电-Problem Archive-4520-小Q系列故事——最佳裁判
  8. Android系统升级全流程
  9. python代码扫描工具_用Python编写一个高效的端口扫描器的方法
  10. 投资-巴菲特的护城河