Java SE 之三个特殊的类

String类(java.long.String)——引用数据类型

1、String类的两种实例化方式

//直接赋值:(在堆上开辟内存)
String str = "Hello World";
System.out.println(str);

//直接赋值的方式是最为常见,但是String本身就是一个类,一定存在构造方法
//String类的构造方法:public String(String str);

//传统方式赋值:
String str = new String("Hello World");//使用关键字new进行对象实例化
System.out.println(str);

2、字符串相等比较
之前我们比较两个数是否相等使用"=="来比较,但是观察字符串使用"=="比较

//两个字符串内容相等,而比较结果为不相等
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);//false

//"=="本身是进行数值比较的,如果用于对象比较
//那么所比较的就是两个对象所保存的内存地址数值化比较,并不是对象的内容
要想进行内容比较,则必须使用String类提供的equals方法
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));//true

注意:String类中 "=="与"equals"的区别
a."==":进行数值比较,比较两个字符串对象的内存地址数值
b."equals":两个字符串内容的比较

3、字符串常量是String的匿名对象
在任何语言的底层,都不会提供有直接的字符串类型。Java中,本身也没有字符串常量的概念,所有使用""定义的内容本质上是String的匿名对象

String str1 = ("Hello");//将匿名的String类对象设置名字,匿名对象保存在堆内存中
String str2 = new String("Hello");
System.out.println(str1.equals(str2));//true
System.out.println("Hello".equals(str2));//true

//在日后的开发中。如果需要判断输入的字符串与特定的字符串是否相等,一定要将特定字符串写在前面
String str1 = null;
System.out.println("Hello".equals(str1));//false

//如果写在了后面,输入为空有可能会报错:java.lang.NullPointerException
String str1 = null;
System.out.println(str1.equals("Hello"));

4、String类两种实例化的区别
1、直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用
2、构造方法:会开辟两块堆内存空间,并且其中一块空间将变为垃圾空间,不会自动保存在对象池中,可以使用intern()方法手工入池
一般采取直接赋值的方式对String类对象实例化

5、字符串常量不可变更
对于字符串的底层实现都是字符数组,数组最大的缺点就是长度固定,在定义字符串常量时其内容不可改变(该地址空间中的内容不可改变)

String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str); // hello world!!!
对于以上代码,表面上看起来输出的字符串 str发生了改变,但其实改变的是字符串的引用

字符串使用原则:
I、字符串实例化时采用直接赋值
II、字符串比较使用equals()
III、字符串不要做过多的改变(减少+操作)

6、字符与字符串的相互转换

//a.将字符数组转为String 
public String(char[] value);//字符数组所有内容转为字符串
public String(char[] value,int offset, int count)//字符数组部分内容转为字符串

//b.将字符串转为单个字符
public char charAt(int index);//取得指定索引字符

//c.将字符串变为字符数组
String -> char[]
public char[] toCharArray();//对象.toCharArray

//取得字符串长度:public int length();

判断一个字符串是否由数字组成

//将字符串变为字符数组后判断每一位字符是否数字
	public static void main(String[] args){
        String str = "1abc2345";
        System.out.println(isNumber(str));
    }
    public static boolean isNumber(String str){
        char[] data = str.toCharArray();
        
        for(int i=0; i<data.length; i++){
            if (data[i] <'0' || data[i] > '9'){//不是数字,停止遍历
                return false;
            }
        }
        return true;
    }

7、字节与字符串
    a.将字节数组转为字符串(*********)
        byte[] -> String
        public String(byte[] value);//将字节数组变为字符串
        public String(byte[] value,int offset, int count)//将部分字节数组变为字符串
        
    b.将字符串转为字节数组
    String -> byte[]
    public byte[] getBytes();
    c.将字符串按照指定编码转为字节数组
    public byte[] getBytes(String Charsetname)
    
8、字符串比较
    a.不区分大小写的相等比较
    public boolean equalsIgnoreCase(String anotherString)
    b.比较两个字符串的大小
    public int compareTo(String anotherString);
        1,返回大于 0 的数:表示大于比较对象
        2,返回等于 0 的数:表示等于比较对象
        3,返回小于 0 的数:表示小于比较对象
        
9 字符串查找
    public boolean contains(String str);//判断str在本字符串中是否存在
    public boolean startsWitch(String str);//判断是否以指定字符串开头
    public boolean startsWitch(String str, int index); //从指定位置开始判断是否以指定字符串开头
    public boolean endsWith(String str);//判断是否以指定字符串结尾
    
10 字符串替换
    public String replaceALL(String regex, String replacement);//替换所有指定内容
    public String replaceFirst(String regex,String replacement);//替换首个内容
        
11 字符串的拆分
    public String[] split(String regex);//将字符串按照指定格式拆分
    public String[] split(String regex, int limit); //将字符串部分拆分,数组长度为limit
        
12 字符串截取:
    public String substring(int beginIndex);[  结尾;
    //从指定位置截取到字符串结尾
    public String substring(int beginIndex, int endIndex);[  )
    //截取部分内容
    
13 String类其他方法
    a.去掉左右空格:
        pubic String trim();
    b.字符串转大小写://首字母大写
        public String toUpperCase();
        public String toLowerCase();
    c.判断字符串是否为空:(只能判断是否为空字符串而不是null)
        public String isEmpty();
    
14、两个sb类*********

——方便进行字符串的修改 java.lang

——StringBuffer  ——StringBuilder 与String的不同点:
        String 的内容不可修改,两只sb可以修改
        StringBuffer采用同步处理,线程安全,效率较低
        StringBuilder采用异步处理,线程不安全,效率较高
        String+底层会将String —> StringBuilder
    
    a.字符串修改:
        public StringBuffer append(各种数据类型)
    b.StringBuffer <-> String
        StringBuffer <- String  //调用StringBuffer 的构造方法过append();
        StringBuffer  -> String  //StringBuffer toString();
    c.字符串反转
        public StringBuffer reverse();
    d.删除指定范围的数据
        public StringBuffer delete(int start, int end);
    e.插入数据
        public StringBuffer insert(int offset, 各种数据类型)
        Object类(RealFather)

Object类是java默认提供的类
    1. java处了object类,所有的类都存在继承关系,默认会继承Object父类,所有类都可以通过Object类进行接收

    2. Object的构造方法
     toString -取得对象信息 
    直接使用对象输出,默认输出地址编码,如果现在输出的是String对象,
    此时输出字符串内容而不是地址,原因在于String类覆写了Object类的toString方法
        System.out.println();//系统默认调用对象的toString方法
        如果默认给出的toString()方法功能不足(不行输出地址而想输出内容)——
            需要在子类中覆写toString()方法
        
    2.2 对象比较——equals()
    2.3 接收引用数据类型
    Object类可以接收所有引用数据类型,包括:类、数组、接口
    

 包装类:包装类就是将基本数据类型封装到类中
1、分类
    a.对象性包装类(Object的直接子类):Boolean(boolean),Character(char)
    
    b.数值性包装类(Number的直接子类):存在数值转换异常
    Byte(byte),Short(Short),Long(long),Double(double),Float(float),Integer(int)
2、装箱与拆箱:基本数据类型与相应包装类的数据处理
装箱:将基本数据类型变为包装类对象,利用每个包装类提供的构造方法实现
拆箱:将包装类中的基本数据值取出,利用NUmber类提供的 xxValue()实现
        Integer i = new Integer(10);//手动装箱
        int result = i.Value();//手动拆箱
        
        Integer i1 = 10;//自动装箱
        int result = i1+10;
    阿里编码规范:所有相同类型的包装类对象之间的值比较,全部使用equals方法
    
    ****说明:对应Integer var = ? 在-128——127之间的赋值,Integer对象在Integer常量池中产生
    ,会复用已有对象。这个区间内的Integer值可以直接使用 == 判断。除此之外的所有数据
    都会在堆上产生,并不会复用已有对象。
    
    使用int还是Integer:
        a.[强制]所有的POJO类(简单java类,Bean)属性必须使用包装类型
        b.[强制]RPC方法的返回值类型和参数必须使用包装类型
        c.[推荐]所有的局部变量使用基本数据类型        
        
3、字符串与基本类型的转换
将字符串转为基本类型:调用各个包装类,parseXX(String str)
    Integer.parseInt(Strint str)

基本类型变为字符串:
a."" + 基本类型    
b.使用String类的Valueof(基本类型,静态方法),此方法不产生垃圾空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值