String、Object、包装类的常用方法以及注意点

1. String类

1.1 String的两种实例化方式

a.直接赋值(推荐)

String str = "hello";//str是一个对象,hello保存在堆内存里

b. 通过构造方式实例化String对象

1.2 字符串相等比较

str.equals(str1);

public Boolean equals(String str1)

1.3 字符串常量是String类的匿名对象

小tips:在进行指定内容比较时,将指定内容(字符串常量)写前面,避免NullPointerException

在JVM底层自动维护一个字符串对象池(对象数组)。如果采用直接赋值的模式进行String类的对象实例化操作,此对象将自动保存到对象池中,如果下次继续采用直接赋值的模式声明String对象,先去对象池中找是否有指定内容,如果有,直接引用;如果没有,开辟新的空间而后将其保存到对象池中,以供下次使用。

采用共享设计模式

字符串手工入池操作:

public native String intern();

eg:

String str1 = new String("hello").intern() ;

String str2 = "hello" ;

System.out.println(str1 == str2); // true

 

1.4 字符串常量不可变更

字符串一旦定义不可改变

String str = "hello" ;

str = str + " world" ;

str += "!!!" ;

System.out.println(str); // hello world!!!

以上字符串的变更是字符串对象的变更而非字符串常量。

 

**1.5字符与字符串**  

String <-> char

 

I.字符数组char[ ] ->String : String类构造方法

public String(char[ ] value1);

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

 

II.将字符串按照索引转为单个字符

String -> char

 

public char charAt(int index):取得指定索引的字符返回

 

III.将字符串转为字符数组

String -> char[ ]

public char[ ] toCharArray( );

eg:

String str = "helloworld" ; // 将字符串变为字符数组

        char[] data = str.toCharArray() ;

        for (int i = 0; i < data.length; i++) {

        data[i] -= 32 ; System.out.print(data[i]+"、");

        } // 字符数组转为字符串

        System.out.println(new String(data)); // 全部转换

        System.out.println(new String(data,5,5)); // 部分转换

 

6.字节与字符串

6.1 byte[ ] ->String

String类构造方法

public String(byte[ ] bytes)

 

String -> byte[ ]

*************************public byte[ ] getBytes( )***************************

public byte[ ] getBytes(String charset) : 按照指定编码转为字节数组

 

乱码产生:1.编解不同2.未写全

 

7.字符串比较

7.1 不区分大小写的相等比较

public boolean equalsIgnoreCase(String anotherString)

 

7.2比较两个字符串的关系

public int compareTo(String anotherString)

 

>0:表示本字符串大于目标字符串

=0:表示两者相等

<0:表示本字符串小于目标字符串

public class Test3{

    public static void main(String[] args){

        String str1 = "abc";

        String str2 = "Abc";

        System.out.println(str1.compareTo(str2));

    }

}

 

8.字符串查找

从一个完整的字符串之中判断指定内容是否存在

 

8.1判断指定字符串是否存在

public boolean contains(String str);

public class Test3{

    public static void main(String[] args){

        String str = "hello world";

        String str1 = "hello";

        System.out.println(str.contains(str1));

    }

}

 

8.2 判断是否以指定字符串开头

public boolean startswith(String prefix)

public boolean startswith(String prefix,int offset)

 

8.3 判断是否以字符串结尾

public boolean endswith(String suffix)

 

9.字符串替换

public String replaceAll(String regex,String reloacement):

将目标字符串全部替换

str.replaceAll("1"."_") : 将str中的所有1换成_

 

10.字符串拆分(***********)

public String[ ] split(String regex) : 将字符串全部拆分

public String[ ] split(String regex,int limit) :

将字符串拆分成数组长度为limit的子字符串数组

 

当特殊字符需要转义后拆分

eg:\\.

 

11.字符串的截取(************)

public String substring(int begainIndex):从指定索引截取到结尾

 

public String substring(int begainIndex,int endIndex):从指定的索引截取部分的内容

 

12. 字符串的其他操作方法

a.去除字符串的左右空格,保留中间空格

public String trim();

b.字符串转大小写(全部大小写)

public String toUpperCase( );

public String toLowerCase( );

 

  1. 判断字符串是否为空字符串(“”,不判断null)

public boolean isEmpty( );

 

13. 两只sb(StringBuffer、StringBuilder)-面试

1. 字符串拼接方法

public synchronized StringBuffer append(各种数据类型);

 

  1. StringBuffer与String的相互转换

String->StringBuffer:

  1. append( )
  2. 调用StringBuffer构造方法new StringBuffer("");

 

StringBuffer -> String

调用StringBuffer.toString();

 

  1. StringBuffer常用操作方法

 

3.1字符串的反转

reverse( ) : StringBuffer

 

3.2删除(修改)指定范围的数据

delete(int start,int end) : StringBuffer

insert(int offset,各种数据类型) :StringBuffer

 

请解释String、StringBuffer与StringBuilder的区别

  • String内容不可改变、两只sb内容可改变
  • StringBuffer (JDK1.0),采用同步处理,线程安全。效率较低;

StringBuilder(JDK1.5),采用异步处理。线程不安全,效率较高,当在String对象进行“+”,编译时会将String类变为StringBuilder进行append()处理

 

  1. Object类(RealFather)-最高参数统一化

Object类是JDK默认提供的一个类。Java中除了Object类,所有类都存在继承关系,默认会继承Object父亲

 

4.1 toString( )-取得对象信息

系统输出默认调用对象的toString()方法

 

Object类toString()只是简单输出当前所引用的类名称以及对象地址

如果想在类中取得本类属性信息。需要覆写toString( );

 

4.2 equlas( )-对象比较

 

class person{

    private String name;

    private int age;

    public Person(String name,int age){

        this.name = name;

        this.age = age;

    }

public String toString() {

        return "姓名:"+this.name+",年龄:"+this.age ;

    }

    public boolean equals(Object obj){

        //1.首先判断obj是否是Person类对象

        if(!(obj instanceof Person)){

            return false;

        }

        //2.判断当前对象是否和传入对象地址相同

        if(this == obj){

            return true;

        }

        //3.obj确实是person对象,比较两者属性内容

        //向下转型取得person属性值

        Person per = (Person) obj;

        return (this.name.equals(per.name)) && (this.age == per.age);

    }

 

 

4.3 接收引用数据类型

Object可以接收所有引用数据类型:数组、类、接口

 

  1. 包装类-使用Object接收一切东西

包装类就是将基本数据类型封装到类中

 

    1. 包装类的分类

a.数值型包装类(Number的直接子类):Byte、Double、Short、Long、Float、Integer(int)

会发生类型转换异常,NumberFormatException

 

b.对象型包装类(Object的直接子类):Boolean、Character(char)

 

5.2装箱与拆箱

装箱:将基本数据类型变为包装类对象。利用每个包装类提供的构造方法实现

拆箱:将包装类中包装的基本数据类型取出,利用xxValue( );

Integer i = new Integer(19);

        int result = i.intValue();

 

对于Integer var = ? 在[-128至127]的赋值,Integer对象是在常量池产生,会复用已有对象,这个区间外的所有数据,都在堆上产生,不会复用已有对象。

Integer i1 = 10;

Integer i2 = 10;

i1 == i2;               //true

Integer i3 = 200;

Integer i4 = 200;

i3 == i4;               //false

 

阿里编码规范:use int or Integer?

I.[强制]所有POJO类(简单Java类,类中只有成员变量、构造方法、getter/setter)属性必须使用包装类

II.[强制]RPC方法返回值和参数必须使用包装类

III.[推荐]所有的局部变量使用基本类型

 

5.3包装类与字符串的转换

 

5.3.1 String->基本数据类型

包装类.parseXX(str);

String -> int : Interger.parseInt(str);

String str = "23";

int result = Integer.parents(str);

……

System.out.print(str+10);

结果为33

 


 

 

5.3.2 基本数据类型 -> String

a.  ""+基本数据类型

b. String类提供的静态方法valueOf(基本类型)---推荐,不产生垃圾空间。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值