Java: Object类,System类,StringBuilder类
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类相关推荐
- 进阶03 System、StringBuilder类
System类 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static long c ...
- Java String、StringBuffer、StringBuilder类解析
String.StringBuffer.StringBuilder类解析 概述 String类:代表字符串. 特点 String实现了Serializable接口,表示String是可序列化的 实现了 ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- Java笔记(一)—StringBuilder类
1.StringBuilder类概述 StringBuilder是一个可变的字符串类,主要指的是StringBuilder对象 中的内容是可变的.与之相比String对象的内容是不变的. 2.Stri ...
- Java基础——数组应用之StringBuilder类和StringBuffer类
接上文:Java基础--数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...
- Java黑皮书课后题第10章:**10.28(实现StringBuilder类)在Java库中提供了StringBuilder类。给出你对下面方法的实现(将新类命名为MyStringBuilder2)
题目 代码 public class Test28_MyStringBuilder2 {String s = "";// 无参构造方法public Test28_MyStringB ...
- Java中的StringBuilder类功能详解
字符串是Java程序中最常用的一种数据结构之一.在Java中的String类已经重载的"+".也就是说,字符串可以直接使用"+"进行连接,如下面代码所示: St ...
- 【Java】字符串的理解与运用以及StringBuffer 和 StringBuilder 类
常见字符串求解: 1.长度 用于获取有关对象的信息的方法称为访问器方法. String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数. 2.字符串索引位置的字符 3.提取 ...
- 普歌-码灵团队-System类,StringBuilder类的常用方法详解
System类,StringBuilder类的常用方法详解(java基础必掌握)java面试必问) System类的介绍: System类中常用方法: 1.System.currentTimeMill ...
- C#OOP之十五 String类StringBuilder类
String类的概述 初次看到String这个词,大家应该都很熟悉.有的同学就会想到:它不就是C#中的一个关键字吗?我们已经接触过了啊,它就是一个数据类型而已,能有何大用?也有细心的同学会发现:这个S ...
最新文章
- 南通市公积金信息系统goldengate复制软件采购
- Matlab | Matlab从入门到放弃(4)——样本均值
- Mac搭建Lua运行环境
- html转word 时 字体颜色,【Web前端问题】文字大小和颜色随着热度改变如何做?...
- ros构建机器人运动学模型_机器人开源控制软件 OROCOS
- JS面向对象系列之一[prototype,原型]
- 拓扑排序Topological Sorting
- python设置很大的刻度_【Matplotlib】设置刻度(1)
- 如何高效构建融资担保场景化分析体系
- 移动应用众包测试综述
- 在工作中历练思考力,行动力,表达力
- Windows 10 企业版许可证即将过期怎么办
- h5 微信公众号获取当前位置
- ORA-39181: Only partial table data may be exported due to fine grain access control on “OE“.“PURCHAS
- 智能学习硬件小程序开发,提升学习感受
- 闲鱼卖家待发货在哪看
- ORAN专题系列-21:5G协议栈功能切分选项与O-RAN白盒化
- 如何字体文件拿数字文件_如何创建和管理数字家庭文件
- 572 另一棵树的子树
- 5年亏炒股指亏1600万,最后才知道Q群里除了他全是骗子