常用类


1.String类

  • String类代表字符串
  • String是一个final类,表示不可变
  • 字符串是常量,创建之后不能更改
  • String对象的字符串内容存放在一个value数组中
package concurrent_programming.chapter3;

public class StringCreateDemo {
    public static void main(String[] args) {
        //方式1
        String str="abc";
        System.out.println(str);

        //方式2
        String s1=new String();
        System.out.println(s1);


        //方式2
        String s2=new String(str);
        System.out.println(s2);


        //方式4
        char a[]={'1','2','3','4'};
        String s3=new String(a);
        System.out.println(s3);


        //方式5
        String s4=new String(a,0,2);//a[0]开始取2个字符
        System.out.println(s4);

    }
}

abc

abc
1234
12

String s1=“abc”;和String s2=new String(“abc”);的区别
第一种方式创建的字符串常量存放在常量池中
第二种方式创建的非常量对象在堆中,对象里面的内容如果常量池中有则不在常量池重新创建

package JavaBasis.chapter9;

public class StringEqualsDemo {
    public static void main(String[] args) {
        String s1="abc";
        String s2="abc";
        String s3=new String("abc");
        String s4=new String("abc");

        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s1==s4);//false
        System.out.println(s3==s4);//false
    }
}
package JavaBasis.chapter9;

public class StringEqualsDemo2 {
    public static void main(String[] args) {
        Person p1=new Person();
        p1.name="tom";
        Person p2=new Person();
        p2.name="tom";
        System.out.println(p1.name.equals(p2.name));//true
        System.out.println(p1.name==p2.name);//true
        System.out.println(p1.name=="tom");//true

        String s1=new String("abc");
        String s2=new String("abc");
        System.out.println(s1==s2);//false
    }
}
class Person{
    String name;
    int age;
}

常量与常量的拼接结果在常量池,常量池中每个字符串常量只有一份
+两边只要有一个是变量,结果就在堆中
如果拼接的结果调用intern()方法,返回值就在常量池中

package JavaBasis.chapter9;

import javax.naming.ldap.ManageReferralControl;

public class StringEqualsDemo3 {
     public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        String s3="hello"+"world";
        String s4="helloworld";

        String s5=s1+"world";
        String s6=s1+s2;

        String s7=(s1+s2).intern();

        System.out.println(s3==s4);//treu
        System.out.println(s5==s4);//false
        System.out.println(s6==s4);//false
        System.out.println(s7==s4);//true
    }
}
  • Java是值传递机制
package JavaBasis.chapter9;

public class StringTest {
    String str=new String("good");
    char ch[]={'t','e','s','t'};

    public void change(String str,char ch[])
    {
        str="test ok";
        ch[0]='b';
    }

    public static void main(String[] args) {
        StringTest st=new StringTest();
        st.change(st.str, st.ch);
        System.out.println(st.str);//good
        System.out.println(st.ch);//best
    }
}

2.字符串常用方法

在这里插入图片描述在这里插入图片描述
在这里插入图片描述


3.StringBuffer类

  • StringBuffer是可变的字符序列
  • StringBuffer():初始容量为16的字符串缓冲区
  • StringBuffer(int size):构造指定容量的字符串缓冲区
  • StringBuffer(String str):将内容初始化为指定字符串的内容

在这里插入图片描述

  • 当append和insert时,如果数组长度不够,可以扩容

4.StringBuilder类

  • StringBuilder和StringBuffer非常类似,均代表可变的字符序列,提供的相关功能和方法也一致

5.三种字符串类的区别

  • String: 不可变序列
  • StringBuffer:可变字符序列,效率低,线程安全
  • StringBuilder:可变字符序列,效率高,线程不安全
package javabasis.chapter9;

public class StringTest2 {
    public static void main(String[] args) {
        String str=null;
        StringBuffer sb=new StringBuffer();
        sb.append(str);//当作字符串"null"
        System.out.println(sb.length());
        System.out.println(sb);

        StringBuffer sb1=new StringBuffer(str);
        System.out.println(sb1);
    }
}
4
null
Exception in thread "main" java.lang.NullPointerException
        at java.lang.StringBuffer.<init>(StringBuffer.java:139)
        at javabasis.chapter9.StringTest2.main(StringTest2.java:11)

6.Java比较器

Java实现对象排序的方式有两种:
1.自然排序: java.lang.Comparable
2.定制排序: java.lang.Comparator

  • 自然排序 java.lang.Comparable
package javabasis.chapter9;

import java.util.Arrays;

public class ComparableTest {
    public static void main(String[] args) {
        Goods all[]=new Goods[4];

        all[0]=new Goods("<<红楼梦>>",100);
        all[1]=new Goods("<<西游记>>",80);
        all[2]=new Goods("<<水浒传>>",120);
        all[3]=new Goods("<<三国演义>>",110);

        Arrays.sort(all);
        System.out.println(Arrays.toString(all));
    }
    
}
class Goods implements Comparable{
    private String name;
    private double price;

    //根据价格 比较商品大小
    public int compareTo(Object o)
    {
        if(o instanceof Goods)
        {
            Goods other=(Goods)o;
            if(this.price>other.price)
            return 1;//自己比较大
            else if(this.price<other.price)
            {
                return -1;
            }
            return 0;

        }
        throw new RuntimeException("输入数据类型不一致");
    }
    public Goods(String name,double price)
    {
        this.name=name;
        this.price=price;
    }
    public String toString()
    {
        return "name:"+name+"  price:"+price+"\n";
    }
}

[name:<<西游记>>  price:80.0
, name:<<红楼梦>>  price:100.0
, name:<<三国演义>>  price:110.0
, name:<<水浒传>>  price:120.0
]
  • 定制排序 java.lang.Comparator
package javabasis.chapter9;

import java.util.Arrays;
import java.util.Comparator;

public class ComparatorTest {
    public static void main(String[] args) {
        Goods all[]=new Goods[4];

        all[0]=new Goods("<<红楼梦>>",100);
        all[1]=new Goods("<<西游记>>",80);
        all[2]=new Goods("<<水浒传>>",120);
        all[3]=new Goods("<<三国演义>>",100);

        Arrays.sort(all,new Comparator() {
            public int compare(Object o1,Object o2)//重写compare方法
            {
                Goods g1=(Goods)o1;
                Goods g2=(Goods)o2;

                return g1.price.compareTo(g2.price);
            }
        });

        System.out.println(Arrays.toString(all));
    }
}
class Goods  {
    String name;
   Double price;//不能是基本类型

  
    public Goods(String name,double price)
    {
        this.name=name;
        this.price=price;
    }
    public String toString()
    {
        return "name:"+name+"  price:"+price+"\n";
    }
}

[name:<<西游记>>  price:80.0
, name:<<红楼梦>>  price:100.0
, name:<<三国演义>>  price:100.0
, name:<<水浒传>>  price:120.0
]
package javabasis.chapter9;

import java.util.Arrays;
import java.util.Comparator;

public class ArrayDescent {
    public static void main(String[] args) {
        int arr1[]=new int[]{1,5,2,4,6,1};
        Integer arr2[]=new Integer[]{1,5,2,4,6,1};//需要包装类类型
        Arrays.sort(arr1);
        System.out.println("升序:"+Arrays.toString(arr1));
        Arrays.sort(arr2,new Comparator<Integer>() {
            public int compare(Integer o1,Integer o2)
            {
                 return o2.compareTo(o1);

             }
        });
        
        System.out.println("降序:"+Arrays.toString(arr2));
    }
}
升序:[1, 1, 2, 4, 5, 6]
降序:[6, 5, 4, 2, 1, 1]

7.BigInteger、BigDecimal类

  • 构造器 BigInteger(String val) : 根据字符串创建BigInteger对象
    在这里插入图片描述
package javabasis.chapter9;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigIntegerTest {
    public static void main(String[] args) {
        BigInteger bi=new BigInteger("123");
        BigDecimal bd=new BigDecimal("123.456");
        System.out.println(bi);//123
        System.out.println(bi.add(new BigInteger("123")));//246
        System.out.println(bi);//123
        
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodePanda@GPF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值