Java语言之三大特殊类

本文围绕JavaSE展开,详细介绍了String类、Object类和包装类。阐述了String类的实例化方式、相等比较、类型转换及其他操作;说明了Object类的toString和equals方法;还讲解了包装类的装箱拆箱、使用场景及与基本类型的转换,为Java开发者提供了实用参考。

String类

首先String类在所有项目开发中都会有使用。

  1. 实例化方式
    直接赋值
String str = "Hello Bit" ; // str是一个对象,那么"Hello Bit" 就应该保存在堆内存中
System.out.println(str) ;

String本身是一个类,所以类中一定存在构造方法。其中一种如下:public String(String str);
在JVM内部会维护一个字符串常量池(对象数组)
若采用直接赋值的方法进行String类的实例化操作,那么该对象会自动保存到对象池中。若下一次继续采用直接赋值实例化String对象,现在对象池中寻找是否有指定对象,若有,直接引用。否则创建新空间,将对象入池,以供下次使用。
传统方法(构造法)`

String str = new String("Hello Bit") ;
System.out.println(str) ;

使用new关键字进行实例化。
当使用构造方法实例化字符串时,实际上开辟两次空间
实例化后的对象并不会保存对象池中,可以使用intern()方法手动入池
2.字符串相等比较
== 操作符用来比较两个变量的值是否相等,对于基本类型而言,数值大小。对于引用类型而言,比较的是地址是否相同而不会比较内容。
所以字符串比较时,需要使用String类提供的equals()方法(区分大小写)equalsIngoreCase()不区分大小写
此时就引出一个问题关于栈内存和堆内存:
栈内存储存的是变量名加变量内容存放的地址;然而堆内存放的是变量所赋值的内容。

  1. String的匿名对象
    简单来说就是没有起名字的对象。
  2. 所有字符串常量""都是String类的匿名对象
    在比较两个字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较
    “hello word”.equals(str)
    原则:
    字符串使用就采用直接赋值。
    字符串比较就使用equals()实现。
    字符串别改变太多。
    char——String
    char[ ]——Sring
    public String(char[ ] value);将字符数组全部转为字符串
    public String(char[ ] value,int offset,int len);将字符数组的部分内容转为字符串
  3. 转换
    String-----char
    public char charAt(int index);取得字符串指定索引的字符,从0开始
    String-----char[ ]
    public char[ ] toCharArray()将字符串转为字符数组
    byte——Stringbyte[ ]——Sring
    public String(byte[ ] value);将字节数组全部转为字符串
    public String(byte[ ] value,int offset,int len);将字节数组的部分内容转为字符串
    String----byte
    public byte[ ] getBytes()将字符串转为字节数组
    编码:将字符串按照怎样的算法转为字节
    public byte[ ] getBytes(String charSet);将字符串按照指定编码格式转为字节数组
    linus默认编码为UTF-8,windows默认编码GBK
  4. 其他
    字符串替换
    public Sting replaceAll(String regex,String replacement)
    将字符串中所有指定内容替换成新内容
    public Sting replaceFirst(String regex,String replacement)
    替换首个内容
    字符串拆分
    public String[ ] split(String regex)
    按照指定格式将字符串拆分
    public String[ ] split(String regex ,int limit)
    将字符串部分拆分数组长度为限定limit
    字符串截取
    public String substring(int beginIndex)
    从索引开始截取到字符串结尾[)
    public String substring(int beginIndex,int endIndex)
    从索引开始到指定位置结束

Object类

Object是Java默认提供的一个类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即,所有类的对象都可以使用Object进行接收。

class Person{}
class Student{}
public class Test {
public static void main(String[] args) {
fun(new Person());
fun(new Student());
}
public static void fun(Object obj) {
System.out.println(obj);
}
}

1.toString()取得对象信息
System.out.println()系统输出,输出任意对象时,默认调用toString()
若自定义类需要进行内容的输出,需要覆写toString()
2.equals()比较两个对象内容
Object类提供的equals默认比较两个对象的地址是否相等
Object类可以接收所有引用类型,包括接口与数组
Object类是参数的最高统一类型

包装类

简单来说就是将基本类型封装到类中。
数值型(Number的子类):byte、short、integer、long、float、double
对象型(object的子类):boolean、charcter

装箱与拆箱
装箱:将基本数据类型变为包装类对象,通过每个包装类的构造方法来实现装箱
拆箱:将包装类中包装的基本类型取出,利用number类中的6种方法
自动拆装箱—JDK1.5
使用包装类与使用基本类型在用法上基本一致
用基本类型还是包装类
1.[强制]所有POJO类使用包装类(类中只有属性与getter/setter构造方法)
2.局部变量推荐使用基本类型

包装类进行数值比较使用equals方法

对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在缓存池(IntegerCache.cache )产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断
String——基本类型
使用各个包装类使用的parseXX(),Integer。parseInt(str)
当字符串包含了非数字,在运行时会抛出NumbeerFormatException
基本类型——String
1.+
2.String的构造方法
3.推荐:使用String.valueOl(所有基本类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值