总结String类、Object类、包装类

一、String类

1、String类的两种实例化方法
1)直接赋值
String str = “Hello Leon”;//Hello Leon 是对象,保存在堆内存
System.out.println(str);
2)传统方法(new 操作)
String str1 = new String(“Hello Leon”);
System.out.println(str1);
2、字符串“==”比较
1)”==”本身是进行数值比较的,如果现在用于对象比较,
那么所比较的就应该是两个对象所保存的内存地址数值比较,而并没有比较对象的内容。
栗子: System.out.println(str == str1);//false

2)那么要想比较内容,则必须采用String类提供的equals方法。
str.equals(str1);
内容相同返回true

栗子:System.out.println(str.equals(str1));//true

面试题:
比较String类“==”和equals的区别:
“==”:进行的是数值比较,比较的是两个字符串对象的内存地址的值;
equals:可以进行字符串内容的比较.

3.所有的字符串常量是String类的匿名对象
字符串常量:String str = “Hello”;

String str = null;
str.length();//空指针异常
注意:
在日后的开发过程之中,
如果要判断用户输入的字符串是否等同于特定字符串,
一定要将特定字符串(字符串常量)写在前面,避免空指针异常。
栗子:
String str = null ; // 假设由用户输入
System.out.println(str.equals(“Hello”));

在进行接收用户输入数据的时候一定要考虑到用户没有输入的问题,
以上面代码为例,用户没有输入的时候,一定会出现“NullPointerException”问题。

字符串两种实例化模式区别:
1)直接赋值:
如果采用直接赋值方式为一字符串创建实例化对象:
则该对象自动保存在这个对象池中。如果下次继续采用直接赋值的方式创建String对象,
会首先比较对象池之中有没有指定内容,若有,则直接采用;
否则,则开辟新空间容纳字符串对象而后自动保存在对象池之中以便下次使用。
2)new操作
采用构造方法实例化对象
a.采用构造方法实例化对象时,每new一个,在堆上开辟两块空间。
其中一块为垃圾空间。
b.采用构造方法产生的字符串对象不会自动入池。
c.String提供手动入池操作intern()方法。intern入的是new的池。String类:
1、String类的两种实例化方法
1)直接赋值
String str = “Hello Leon”;//Hello Leon 是对象,保存在堆内存
System.out.println(str);
2)传统方法(new 操作)
String str1 = new String(“Hello YuanLi”);
System.out.println(str1);
2、字符串“==”比较
1)”==”本身是进行数值比较的,如果现在用于对象比较,
那么所比较的就应该是两个对象所保存的内存地址数值比较,而并没有比较对象的内容。
栗子: System.out.println(str == str1);//false

2)那么要想比较内容,则必须采用String类提供的equals方法。
str.equals(str1);
内容相同返回true

栗子:System.out.println(str.equals(str1));//true

面试题:
比较String类“==”和equals的区别:
“==”:进行的是数值比较,比较的是两个字符串对象的内存地址的值;
equals:可以进行字符串内容的比较.

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

3.所有的字符串常量是String类的匿名对象
字符串常量:String str = “Heoo”;

String str = null;
str.length();//空指针异常

注意:
在日后的开发过程之中,
如果要判断用户输入的字符串是否等同于特定字符串,
一定要将特定字符串(字符串常量)写在前面,避免空指针异常。

String str = null ; // 假设由用户输入 
System.out.println(str.equals("Hello"));

在进行接收用户输入数据的时候一定要考虑到用户没有输入的问题,
以上面代码为例,用户没有输入的时候,一定会出现“NullPointerException”问题。

4、字符串两种实例化模式区别:
1)直接赋值:
如果采用直接赋值方式为一字符串创建实例化对象:
则该对象自动保存在这个对象池中。如果下次继续采用直接赋值的方式创建String对象,
会首先比较对象池之中有没有指定内容,若有,则直接采用;
否则,则开辟新空间容纳字符串对象而后自动保存在对象池之中以便下次使用。
2)new操作
采用构造方法实例化对象
a.采用构造方法实例化对象时,每new一个,在堆上开辟两块空间。
其中一块为垃圾空间。
b.采用构造方法产生的字符串对象不会自动入池。
c.String提供手动入池操作intern()方法:public String intern();。intern入的是new的池。

5.字符串常量不可变更
在定义字符串常量时,它的内容不可改变。
变得是引用,不是对象。

使用字符串时,尽量少变更。(+操作最多执行三次)
JVM底层会将String变为StringBuilder(可变).
equalsIgnoreCase();//忽略大小写

6、字符串常量不可变更
在定义字符串常量时,它的内容不可改变。
变得是引用,不是对象。

使用字符串时,尽量少变更。(+操作最多执行三次)
JVM底层会将String变为StringBuilder(可变).
equalsIgnoreCase();//忽略大小写

二、Object类

1、Object是所有引用数据类的父类,即所有类都可以使用Object来接收(包括类,数组,接口)

1)toString的使用方法
其他类型是输出对象的地址编码,但如果是String类使用toString,则输出内容。
所以如果需要用toString()命令来获取信息,则需要自己进行toString的覆写

2)对象比较
Stirng类的equals()方法就是覆写Object的equals()

3)Object接收接口对象
假设msg为接口类,可以直接通过Object obj=msg;将msg接口赋给obj
所以要想偷懒不考虑类型,就用object类接收

三、包装类

1、包装类的基本原理:包装类就是将基本数据类型封装到类中
栗子:自己定义一个包装类
class intdemo {
private int num;
public intdemo(int num){
this.num = num;
}
public int intvalue(){
return this.num;
}
}

这时候的intdemmo实际上就是int数据类型的包装类,利用intvalue就可以实现基本数据类型转变成对象的需求

基本数据类型包装成一个类对象的本质就是使用Object进行接收处理

2、装箱与拆箱:
在包装类与基本数据类型处理之中存在有两种概念:
a.装箱:将基本数据类型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理
b.拆箱:将包装类中包装的基本数据类型取出,利用Number类中提供的六种方法

字符串与基本数据类型:

1)String变成int类型(Integer类型) Interger.parseInt(原对象);
2)String变成double类型(Double类型)Double.parseDouble(原对象);
3)String变成Boolean类型(Boolean类型)

字符串与boolean转换就不受此影响

基本数据类型变为字符串:
1.任何数据类型使用了“+”连接空白字符串就变为了字符串类型
2.使用String类中提供的valueOf()方法,此方法不产生垃圾

猜你喜欢

转载自blog.csdn.net/qq_39026129/article/details/80956819
今日推荐