String类
首先String类在所有项目开发中都会有使用。
- 实例化方式
直接赋值
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()不区分大小写
此时就引出一个问题关于栈内存和堆内存:
栈内存储存的是变量名加变量内容存放的地址;然而堆内存放的是变量所赋值的内容。
- String的匿名对象
简单来说就是没有起名字的对象。 - 所有字符串常量""都是String类的匿名对象
在比较两个字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较
“hello word”.equals(str)
原则:
字符串使用就采用直接赋值。
字符串比较就使用equals()实现。
字符串别改变太多。
char——String
char[ ]——Sring
public String(char[ ] value);将字符数组全部转为字符串
public String(char[ ] value,int offset,int len);将字符数组的部分内容转为字符串 - 转换
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 - 其他
字符串替换
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(所有基本类型)