Java字符串类型

要注意区分字符与字符串的区别:字符是指简单类型char,它的标准格式为单引号;而字符串是指复合类型String,它的标准格式为双引号。

在Java中字符串属于对象,Java提供了String类来创建和操作字符串。但是对字符串要进行频繁修改的时候使用StringBuffer和StringBuilder类,因为它们的对象经过多次修改而不产生新的未使用对象。

public static void main(String[] args) {
		String s1="ab"+"c";//Java针对+和+=进行了重新定义,在字符串中+表示字符串拼接
		String s2="abc";
		System.out.println(s1==s2);//true 在复杂类中==用于比较两个对象的地址是否相同
		System.out.println(s1.equals(s2));//true 调用String中定义的方法,用于比较两个字符串内容是否一致
	}

注意:字符串常量的拼接,在方法区的常量池中完成

String s0="ab";
String s1=s0+"c";
String s2="abc";
System.out.println(s1==s2);//false

String类是不可改变的,一旦创建了String类它的值就不会发生改变了,否则就会导致对象的新建。

String类型的拼接是通过StringBuilder类中的append方法实现的,然后返回toString的结果。

//String 类型的基本使用
public class Test{
    public static void main(String[] args){
        String s1="ab中c";//定义变量,String一般用于字符串常量如果修改内容会导致对象的新建
        
        //获取字符串中的字符个数
        int len=s1.length();//字符串中的length是一个方法,而数组中的length是一个属性
        System.out.println(len);

        //获取制定下标位置上的字符
        for(int i=0;i

 StringBuilder和StringBuffer的基本用法:

String一般是用于常用字符串,而StrinBuilder和StringBuffer用于频繁修改规则。

//构建对象
StringBuilder ss1=new StringBuilder();
StringBuffer ss2=new StringBuffer("abcd");

//拼接字符串
ss2.append("123");//在字符串末尾拼接

ss2.insert(1,"rst");//在指定下标位置上插入字符串

ss2.delete(1,3);//删除指定位置上的内容【start=1.end=3】

ss2.CharAt(1);//值删除指定下标上的字符

ss2.replace(1,2,"新的内容");//将指定下标位置上的内容替换为新内容

System.out.println(ss2);


ss2.reverse();//反转字符串

int len=ss2.length();//获取字符个数

int pos=ss2.indexof("容内")//查找位置


//其他方法基本和String一致


数据类型转换

String--Integer或者其他类型,基本语法:包装类名称.parseXxx

String s1="123";
int kk=Integer.parseInt(s1);//返回值int
System.out.println(kk+1);

int k2=Integer.valueof(s1);//返回值Integer,自动拆箱
System.out.println(k2+10); 

Integer或者简单类型或者其它数据类型——String

int kk=123;
String ss=""+kk;//自动转换

 特殊方法:String类使用静态方法format()返回一个String对象,是用来创建可复用的格式化字符串。

最常见的格式符号:浮点数%f、整型%d、字符串%s。

String ss=null;
//字符串的判空处理
//trim方法的含义是去掉字符串前后两端的空格
if(ss==null ||ss.trim().length()<1){
    System.out.println("字符串内容为空!");
}


String ss=null;
//如果使用普通方法进行判断ss.equals("bbb")时会出现异常中断,使用Objects.equals可以避免空指针异常
if(Objects.equals(ss,"bbb")){
    System.out.println("字符串内容为bbb");
}

可变与不可变:
String类中使用字符数组保存字符串,因为有final修饰符,所以可以知道string对象是不可变的。private final char value[];
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,可知这两种对象都是可变的。char[] value;


是否多线程安全:
String中的对象是不可变的,也就可以理解为常量,显然线程安全。
AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。


StringBuilder与StringBuffer共同点:
StringBuilder与StringBuffer有公共父类AbstractStringBuilder抽象类。抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。
StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

日期类型

java.util包提供了Date类来封装当前的日期和时间

Date: getTime()、setTime()

Date now=new Date();//创建一个日期对象,默认封装系统当前时间
System.out,println(now);

Date d1=new Date(2000-1900,2-1,3)//分别是year,month,date 【注意:要年-1900,月份-1】

long l1=now.getTime();//获取毫秒值

long s1=now.getTime()-d1.getTime();//日期中的减法:now-d1
//两个日期之间的天数差
System.out.println(s1/1000/60/60/24);

System.out.println(now.getYear()+1900);//年份
System.out.println(now.getMonth()+1);//月份
//now.getDate()日期    now.getDay()星期    now.getHours()小时   now.getMinutes()分钟  now.getSeconds()秒
Date now=new Date();
DateFormat df= new SimpleDateFormat("yyyy年MM月d日e  HH点mm分ss秒");//自定义日期的格式

//将日期类型数据按照指定格式转换为字符串
String s1=df.format(now);
System.out,println(s1);//当前系统具体时间

//将字符串按照指定格式转换为日期类型数据
try{
    //可能出现异常,必须进行处理
    Date dd=df.parse(s1);
    System.out.println(dd);
}catch(ParseException e){
    e.printStackTrace();
}

//根据现在的时间计算:
Calendar now= Calendar.getInstance();
now.add(Calendar.Year,1)//现在时间是一年后  -1是一年前


//根据某个特定时间 date(Date 型)计算
Calendar specialDate =Calendar.getInstance();
specialDate.setTime(new Date());//注意在此处将specialDate的值改为特定日期
specialDate.add(Calendar.Year,1);//特定时间的一年后   -1是一年前

你可能感兴趣的:(java,开发语言,后端)