java aip_Java API

String类的概述和使用(掌握)

1、多个字符组成的一串数据。

其实它可以和字符数组进行相互转换。

2、构造方法:

A:public String()

B:public String(byte[] bytes)

C:public String(byte[] bytes,int offset,int length)

D:public String(char[] value)

E:public String(char[] value,int offset,int count)

F:public String(String original)

下面的这一个虽然不是构造方法,但是结果也是一个字符串对象

G:String s = "hello";

3、字符串的特点

A:字符串一旦被赋值,就不能改变。

注意:这里指的是字符串的内容不能改变,而不是引用不能改变。

B:字面值作为字符串对象和通过构造方法创建对象的不同

String s = new String("hello");和String s = "hello"的区别?

4、字符串创建与存储机制

88a7701a10aa8b3bcaf0dc910943a659.png

5、字符串的面试题(看程序写结果)

A:==和equals()

String s1 = new String("hello");

String s2 = new String("hello");

System.out.println(s1 == s2);// false

System.out.println(s1.equals(s2));// true

String s3 = new String("hello");

String s4 = "hello";

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

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

String s5 = "hello";

String s6 = "hello";

System.out.println(s5 == s6);// true

System.out.println(s5.equals(s6));// true

B:字符串的拼接

String s1 = "hello";

String s2 = "world";

String s3 = "helloworld";

System.out.println(s3 == s1 + s2);// false

System.out.println(s3.equals((s1 + s2)));// true

System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true

System.out.println(s3.equals("hello" + "world"));// true

6、字符串的功能(自己补齐方法中文意思)

A:判断功能

boolean equals(Object obj)

boolean equalsIgnoreCase(String str)

boolean contains(String str)

boolean startsWith(String str)

boolean endsWith(String str)

boolean isEmpty()

B:获取功能

int length()

char charAt(int index)

int indexOf(int ch)

int indexOf(String str)

int indexOf(int ch,int fromIndex)

int indexOf(String str,int fromIndex)

String substring(int start)

String substring(int start,int end)

C:转换功能

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs)

static String valueOf(int i)

String toLowerCase()

String toUpperCase()

String concat(String str)

D:其他功能

a:替换功能

String replace(char old,char new)

String replace(String old,String new)

b:去空格功能

String trim()

c:按字典比较功能

int compareTo(String str)

int compareToIgnoreCase(String str)

7、字符串的案例

A:模拟用户登录

B:字符串遍历

C:统计字符串中大写,小写及数字字符的个数

D:把字符串的首字母转成大写,其他小写

E:把int数组拼接成一个指定格式的字符串

F:字符串反转

G:统计大串中小串出现的次数

8、String,StringBuffer,StringBuilder的区别?

String 是内容不可变的,而 StringBuffer, StringBuilder 都是内容可变的。

StringBuffer 是同步的,数据安全,效率低;

StringBuilder 是不同步的,数据不安全,效率高。

9、String类的常见操作补充

返回指定字符串在此字符串中最后一次出现处的索引

int lastIndexOf(int ch)

将此字符串与指定的字符串比较

/**String中的equals比较的是字符串的值非地址(重写了toString方法)*/

boolean equals(Object anObject)

根据参数 regex 将原来的字符串分割为若干个子字符串

String[] substring(int beginIndex)

StringBuffer类(掌握)

由于字符串是常量,因此一旦创建,其内容和长度是不可改变的(与 String 类最大的区别)。如果需要对一个字符串进行修改,则只能创建新的字符串。

用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲区类。StringBuffer供我们使用。

StringBuffer类的常见操作

StringBuffer具有String的大部分方法

StringBuffer 的构造函数

public StringBuffer() //无参构造方法

public StringBuffer(int capacity) //指定容量的字符串缓冲区对象

public StringBuffer(String str) //指定字符串内容的字符串缓冲区对象

StringBuffer 的方法

public int capacity() //返回当前容量。 理论值

public int length() //返回长度(字符数)。 实际值

StringBuffer 的添加功能

public StringBuffer append(String str) //可以把"任意类型数据"添加到字符串缓冲区里面,并返回字符串缓冲区本身

public StringBuffer insert(int offset,String str) //在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身(注意不要越界)

StringBuffer 的删除功能

public StringBuffer deleteCharAt(int index) //删除指定位置的字符,并返回本身

public StringBuffer delete(int start,int end) //删除从指定位置开始指定位置结束的内容,并返回本身

StringBuffer 的替换功能

public StringBuffer replace(int start,int end,String str) //从start开始到end用str替换

StringBuffer setCharAt(int index, char ch)  //修改指定位置 index 处的字符序列

StringBuffer 的截取功能

StringBuffer setCharAt(int index, char ch)

返回 StringBuffer 缓冲区的字符串

String toString()

StringBuffer 的反转功能

public StringBuffer reverse()

StringBuffer 和String 相互转换

String -- StringBuffer

构造方法

append()方法

StringBuffer -- String

构造方法

toString()方法

StringBuffer 特性

A:String,StringBuffer,StringBuilder的区别?

String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。

StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高

B:StringBuffer和数组的区别?

二者都可以看出是一个容器,装其他的数据。

但是呢,StringBuffer的数据最终是一个字符串数据。

而数组可以放置多种数据,但必须是同一种数据类型的。

C:形式参数问题

String作为参数传递

StringBuffer作为参数传递

注意:

String作为参数传递,效果和基本类型作为参数传递是一样的。

Object类

Object 类是层次结构的根类,每个类都使用 Object 作为超类。每个类都直接或者间接的继承自 Object 类。

Object类的构造方法有一个,并且是无参构造

这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造

Object类的常见操作

返回该对象的哈希码值(将地址转化为十六进制字符串形式)

/*hashCode与equals的区别与联系

*1、equals方法用于比较对象的内容是否相等(前提覆盖以后,默认比较地址值,String对象默认比较值)

*2、hashcode方法只有在集合中用到

*3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法

进行比较(判断对象的内容是否相等)。

*4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的

任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合

中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合

中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入

到集合中,否则不放入。*/

public int hashCode()

返回此 Object 的运行时类(编译的字节码文件对象:.class对象)

public final Class getClass()

以 String 的形式返回此 Class 对象所表示的实体

/*通常使用 getClass().getName();

*返回类的全路径*/

public String getName()

返回对象的字符串表示(类的全路径@

/** Integer类下的一个静态方法:

* public static String toHexString(int i):把一个整数转成一个十六进制表示的字符串

* 但是这个信息是没有任何意义的。所以,建议所有子类都重写该方法。

*

* 怎么重写呢?

* 通常自动生成toString()方法。把该类的所有成员变量值组成返回即可。

*

* 注意:

* 直接输出一个对象的名称,其实就是调用该对象的toString()方法。*/

public String toString()

判断对象是否相等(默认比较地址)

/** ==:

* 基本类型:比较的就是值是否相同

* 引用类型:比较的就是地址值是否相同

* equals:

* 重写该方法(自动生成),比较对象的成员变量值是否相同

* 判断对象是否是某个类的对象:对象名 instanceof 类名*/

public boolean equals(Object obj)

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定

protected void finalize()

创建并返回此对象的一个副本

protected Object equals(Object obj)

例子

/** Cloneable:此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。

* 这个接口中没有方法是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。

* public class Student implements Cloneable*/

public classStudentDemo {public static void main(String[] args) throwsCloneNotSupportedException {//创建学生对象

Student s = newStudent();

s.setName("林青霞");

s.setAge(27);//克隆学生对象

Object obj =s.clone();

Student s2=(Student)obj;

System.out.println("---------");

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());//以前的做法

Student s3 =s;

System.out.println(s3.getName()+"---"+s3.getAge());

System.out.println("---------");//其实是有区别的:改变克隆对象的成员变量值不会改变原对象的成员变量值

//改变引用相同地址值的对象会改变原对象的成员变量值

s3.setName("刘意");

s3.setAge(30);

System.out.println(s.getName()+"---"+s.getAge());

System.out.println(s2.getName()+"---"+s2.getAge());

System.out.println(s3.getName()+"---"+s3.getAge());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值