Java基础—API及Object类和String类

Posted sunlangui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础—API及Object类和String类相关的知识,希望对你有一定的参考价值。

Java APIAPI: Application(应用) Programming(程序) Interface(接口)

Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

1.Object类

 Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object

  equals方法

   equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

  

在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写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 + "]";

 

 

 

 

2.String类

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

 

//演示字符串:

 

String str  = "oracle";

 

str = "甲骨文";

字符串的本质是一个字符的数组。

代码演示:

String s3 = "abc";

 

String s4 = new String("abc");

 

System.out.println(s3==s4);//false

 

System.out.println(s3.equals(s4));//true,

 

//因为String重写了equals方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)

 

 

 

s3和s4的创建方式有什么不同呢?

 

s3创建,在内存中只有一个对象。这个对象在字符串常量池中

 

 s4创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中

 

 

String构造方法

 

  

String s1 = new String(); //创建String对象,字符串中没有内容

 

byte[] bys = new byte[]97,98,99,100;

String s2 = new String(bys); // 创建String对象,把数组元素作为字符串的内容

String s3 = new String(bys, 1, 3); //创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素

 

char[] chs = new char[]’a’,’b’,’c’,’d’,’e’;

String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容

String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素

 

String s6 = new String(“abc”); //创建String对象,字符串内容为abc

 

 

 

字符串是一个对象,那么它的方法必然是围绕操作这个对象的数据而定义的

字符串的功能:

1)返回此字符串的长度(length()/int)

String str = "abcde";

 

int len = str.length();

 

System.out.println("len="+len);

 

 

2)获取部分字符串(substring()/String)

String str = "abcde";

 

String s1 = str.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符

 

String s2 = str.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束所有字符

 

System.out.println("str="+str);

 

System.out.println("s1="+s1);

 

System.out.println("s2="+s2);

 

3)测试此字符串是否以指定字符串开头和结尾(startsWith(),endWith() / boolean)

String str = "StringDemo.java";

boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头

boolean b2 = str.startsWith("String");

boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾

 

4)判断此字符串是否包含指定字符串(contains()/boolean)

String str = "abcde";

boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false

 

5)返回第一次出现该字符串的索引,不包含则返回-1(indexOf () / int )

String str = "abcde";int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1

 

6)将字符串转化成一个字节数组(getBytes() / byte[])

 

String str = "abcde";

byte[] bytes = str.getBytes();

 

7)将字符串转化成一个字符数组(toCharArray() / char[])

String str = "abcde";

char[] chs = str.toCharArray();

 

8)判断两个字符串的内容是否相同(equals()/ boolean)equalsIgnoreCase() 不区分大小写

String str = "abcde";

String str2 = "abcde";

String str3 = "hello";

boolean b1 = str.equals(str2);

boolean b2 = str.equals(str3);

 

 

StringBuffer类

  API中说字符串缓冲区支持可变的字符串

 

 StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

 StringBuffer一些功能代码演示:(可查阅API进行学习)

创建一个字符串缓冲区对象。用于存储数据。

 

StringBuffer sb = new StringBuffer();

 

sb.append("haha"); //添加字符串

 

sb.insert(2, "it");//在指定位置插入

 

sb.delete(1, 4);//删除

 

sb.replace(1, 4, "cast");//替换指定范围内的内容

 

String str = sb.toString();

 

在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。这种时候,我们就可以把代码现在一起,如append方法一样,代码如下:

创建一个字符串缓冲区对象。用于存储数据。

StringBuffer sb = new StringBuffer();

添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操作,必须转成字符串才可以。

String str = sb.append(true).append("hehe").toString();

 

 

 

StringBuilder

  它也是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

 

 

 

 

 

 

 

 

 

以上是关于Java基础—API及Object类和String类的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-基础-常用API(equals,tostring方法,String类)

Java基础12:深入理解Class类和Object类

JAVA面向对象的多态性及抽象类和接口

Java学习(API及Object类String类StringBuffer字符串缓冲区)

JAVA零基础小白学习教程之day10-API&Object&String

JAVA零基础小白学习教程之day10-API&Object&String