Java基础—API及Object类和String类

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

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

1.Object类

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

  equals方法

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

  

在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。

如下代码演示:

/*

扫描二维码关注公众号,回复: 7232661 查看本文章

  描述人这个类,并定义功能根据年龄判断是否是同龄人

  由于要根据指定类的属性进行比较,这时只要覆盖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 要快。

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/sunlangui/p/11487911.html