包装类

包装类 - 引入

【1】什么是包装类:
以前定义变量,经常使用基本数据类型
对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器将基本数据类型对应进行了一个封装,产生了一个新的类,---》包装类。

int,byte..--->基本数据类型

包装类--->引用数据类型

【2】对应关系:
基本数据类型        对应的包装类        继承关系 
byte                              Byte                ---》Number---》Object 
short                             Short              ---》Number---》Object 
int                                 Integer            ---》Number---》Object 
long                              Long               ---》Number---》Object
float                              Float               ---》Number---》Object 
double                          Double            ---》Number---》Object 
char                              Character         Object
boolean                        Boolean            Object

【3】已经有基本数据类型了,为什么要封装为包装类?
(1)java语言面向对象的语言,最擅长的操作各种各样的类。
(2)以前学习装数据的---》数组,int0]Stringldoublel StudentD
以后学习的装数据的---》集合,有一个特点,只能装引用数据类型的数据

【4】是不是有了包装类以后就不用基本数据类型了?

不是。

包装类 - 常用属性 - 常用构造器

【1】直接使用,无需导包:

java. lang

类Integer

【2】类的继承关系:

jara. lang. object
        jaya.lang.Number
                java. lang. integer

【3】实现接口:

所有已实现的接口;
Serializable,Comparable<Integer)

【4】这个类被final修饰,那么这个类不能有子类,不能被继承:

pubilc final class Integer

extends Number
implements Cosparable<Integer>

【5】包装类是对基本数据类型的封装:

对int类型封装产生了Integer
Integer类在对象中包装了一个基本类型int的值。

Integer类型的对象包含一个int类型的字段。

【6】类的历史:

从以下版本开始:
        JDK1.0

public class test01 {//这是一个main方法,是程序的人口public static void main(String[] args){//属性:System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);//“物极必反”原理:System.out.println(Integer.MAX_VALUE+1);System.out.println(Integer.MIN_VALUE-1);}
}

运行结果如下:

【7】属性:

//属性:
System.out.println(IntegerMAXVALUE); 
System.out.println(IntegerMIN VALUE);

//"物极必反"原理:
System.out.println(Integer.MAX VALUE+1);
System.out.println(Integer.MIN VALUE-1);

【8】构造器(发现没有空参构造器)

(1)int类型作为构造器的参数

Integer i2 = new Integer("12");Inteqer i3 = new Integer("abcdef");

(2)String类型作为构造器的参数

Integer i1 = new Integer(12);

包装类 - 自动装箱 - 自动拆箱

【9]包装类特有的机制:自动装箱、自动拆箱:

//自动装箱:int--->IntegerInteger i = 12; System.out.println(i);//自动拆箱:Integer--->intInteger i2 = new Integer(12);int num = i2;System.out.println(num);

(1)自动装箱自动拆箱是从JDK1.5以后新出的特性
(2)自动装箱自动拆箱:将基本数据类型和包装类进行快速的类型转换。

验证:

包装类 - 常用方法

【10】Integer 常用方法

public class Test04 {//这是一个main方法,是程序的人口:public static void main(String[] args){//compareTo:只返回三个值:要么是0,-1,1 Integer i1 = new Integer(value:6); Integer i2 = new Integer( value:12);System.out.println(i1.compareTo(i2));// return(x<y)?-1:((x==y)?0:1)//eauals:Inteaer对Obiect中的eauals方法进行了重写,比较的是底层封装的那个value的值。//Integer对象是通过new关键字创建的对象: Integer i3 = new Integer(value: 12); Integer i4 = new Integer(value: 12);System.out.println(i3 == i4);//false因为比较的是两个对象的地址 boolean flag = i3.equals(i4); System.out.println(flag);//Integer对象通过自动装箱来完成: Integer i5 = 130;Integer i6 = 130;System.out.println(i5.equals(i6));//true System.out.println(i5==i6);/*如果自动装箱值在-128~127之间,那么比较的就是具体的数值否在,比较的就是对象的地址*///intValue():作用将Integer--->int Integer i7 = 130;int i= i7.intValue();System.out.println(i);//parseInt(String s) :String--->int: int i8=Integer parseInt(s:"12"); System.out.println(i8);//toString:Integer--->String Integer i10 = 130;System.out.println(i10.toString());}
}

日期相关

日期相关 - java.util.Date

package zuoye15;import java.util.Date;public class Test {
//这是一个main方法·是程序的人口:public static void main(String[] args){//java.util.Date:Date d=new Date(); System.out.println(d);System.out.println(d.toString());System.out.println(d.toGMTString());//过期方法·过时方法·废弃方法。 System.out.println(d.toLocaleString());System.out.println(d.getYear());//122+1900=2022System.out.println(d.getMonth());//5:返回的值在日和11之间·值日表示1月//返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数。 System.out.println(d.getTime());//1592055964263 System.out.println(System.currentTimeMillis());/*(1)疑问:以后获取时间差用:getTime()还是currentTimeMiLLis()答案:currentTimeMillis()--》因为这个方法是静态的,可以类名,方法名直接调用(2)public static native long currentTimeMillis();本地方法为什么没有方法体?因为这个方法的具体实现不是通过java写的。*/}
}

        /*(3)这个方法的作用:一般会去衡量一些算法所用的时间*/
public class Test {
//这是一个main方法·是程序的人口:public static void main(String[] args){long startTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) {System.out.println(i);long endTime=System.currentTimeMillis(); System.out.println(endTime-startTime);}}
}

日期相关 - java.sql.Date

(使用 IDEA)

import java.sql.Date;public class Text {public static void main(String[] args){//java.sql.Date:Date d = new Date(1592055964263L);System.out.println(d);/*(1)java.sql.Date和java.util.Date的区别:java.util.Date: 年月日 时分秒java.sql.Date: 年月日(2)java.sql.Date和java.utilDate的联系:java.sql.Date(子类) extends java.util.Date(父类)*///java.sql.Date和java.util.Date相互转换://【1】util--->sqL:java.util.Date date = new Date(1592055964263L);//创建util.Date的对象//方式1:向下转型Date date1=(Date) date;/*父类:Animal 子类:DogAnimal an =new Dog();bog d=(Dog)an;*///方式2:利用构造器Date date2 = new Date(date.getTime());//【2】sql-->util:java.util.Date date3=d;//[3]String--->sqL.Date:Date date4 = Date.valueOf("2020-5-7");}
}

日期相关 - SimpleDateFormat

【1】String---》java.util.Date类型转换:

分解:
(1)String--->java.sql.Date
(2)java.sql.Date--->java.util.Date

public class Test04 {//这是一个main方法,是程序的入口:public static void main(String[] args) {// (1)string--->java.sql.Datejava.sq1.Date date = java.sq1.Date.valueOf("2015-9-24");//(2)java.sgl.Date--->java.util.Date java.util.Date date2 = date;System.out.println(date2.toString());}
}

上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,换成其它类型,就会出现异常:

【2】引入新的类:

package zuoye15;import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test05 {//这是一个main方法,是程序的入口:public static void main(String[] args){//日期转换://SimpleDateFormat(子类) extends DateFormat(父类是一个抽象类)//格式化的标准已经定义好了:DateFormat df =new SimpleDateFormat( pattern:"yyyy-MM-ddHH:mm:ss");//String--->Datetry {Date d=df.parse( source:"2019-4-6 12:23:54"); System.out.println(d);} catch (ParseException e){e.fillInStackTrace();}//Date--->StringString format=df.format(newDate()); System.out.println(format);Date date = new Date();System.out.println(date.toString()); System.out.println(date.toGMTString());System.out.println(date.toLocaleString());}private static Date newDate() {// TODO Auto-generated method stubreturn null;}
}

日期相关 - Calendar

import java.util.Calendar;import java.util.GregorianCalendar;public class Test06 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//Calendar是一个抽象类,不可以直接创建对象//GregorianCalendar()子类extendsCalendar(父类是一个抽象类)Calendar cal=new GregorianCalendar();Calendar cal2=Calendar.getInstance();System.out.println(cal);//常用的方法://get方法,传入参数:Calendar中定义的常量System.out.println(cal.get(Calendar.YEAR)); System.out.println(cal.get(Calendar.MONTH)); System.out.println(cal.get(Calendar.DATE));System.out.println(cal.get(Calendar.DAY_OF_WEEK));System.out.println(cal.getActualMaximum(Calendar.DATE));//获取当月日期的最大天数 System.out.println(cal.getActualMinimum(Calendar.DATE));//获取当月日期的最小天数// set方法:cal.set(Calendar.YEAR,1990);cal.set(Calendar.MONTH,3);cal.set(Calendar.DATE,16);System.out.println(cal);//String--->Calendar:/1分解://String--->java.sql.Date:java.sql.Date date = java.sql.Date.valueOf("2022-5-7");//java.sql.Date-->Calendar: cal.setTime(date);System.out.println(cal);}
}

运行结果如下:

日期相关 - Calendar练习 :

解:

import java.util.Calendar;
import java.util.Scanner;public class Test08 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//录入日期的string:Scanner sc=new Scanner(System.in);System.out.print("请输入你想要查看的日期:(提示:请按照例如2012-5-6的格式书写)");String strDate=sc.next();//System.out.println(strDate);//String--->Calendar:// String-->Date:java.sql.Date date = java.sql.Date.valueOf(strDate);//Date--->Calendar:Calendar cal=Calendar.getInstance(); cal.setTime(date);//后续操作:// 星期提示:System.out.println("日\t一\t二\t三\t四\t五\t六\t");//获取本月的最大天数:int maxDay=cal.getActualMaximum(Calendar.DATE);//获取当前日期中的日:int nowDay=cal.get(Calendar.DATE);//将日期调为本月的1号:cal.set(Calendar.DATE,1);//获取这个一号是本周的第几天int num =cal.get(Calendar.DAY_OF_WEEK);//System.out.println(num);//前面空出来的天数为:int day =num -1;//引入一个计数器:int count=0;//计数器最开始值为0//在日期前将空格打印出来:for (int i = 1; i <= day; i++) {System.out.print("\t");}//空出来的日子也要放入计数器 count = count + day;count = count +day;//遍历:从1号开始到maxDay号进行遍历:for (int i = 1; i <= maxDay ;i++) {if(i==nowDay){//如果遍历的和当前日子一样的话,后面多拼一个*System.out.print(i+"*"+"\t");}else{System.out.print(i+"\t");}count++;//每在控制台输出一个数字,计数器做加1操作if(count%7 == 0){//当计数器的个数是7的倍数的时候,就换行操作System.out.println();}}}
}

运行结果如下:

日期相关 - JDK1.8新增日期时间API的原因

JDK1.0中使用iava.util.Date类--》第一批日期时间API

JDK1.1引入Calendar类--》第二批日期时间API

缺陷:
可变性:像日期和时间这样的类应该是不可变的。
偏移性:Date中的年份是从1900开始的,而月份都从0开始。

格式化:格式化只对Date有用,Calendar则不行。

JDK1.8新增日期时间API--》第三批日期时间API

日期相关 - JDK1.8新增日期时间API - LocaLDate,LocaLTime,LocalDateTime

LocaLDate:日期

LocaLTime:时间

LocalDateTime:日期+时间

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Test09 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//1.完成实例化:// 方法1:now()--获取当前的日期,时间    日期+时间LocalDate localDate=LocalDate.now();System.out.println(localDate);LocalTime localTime = LocalTime.now();System.out.println(localTime);LocalDateTime localDateTime=LocalDateTime.now();System.out.println(localDateTime);//方法2:of()--设置指定的日期,时间,日期+时间LocalDate of = LocalDate.of(2010,5,6);System.out.println(of);LocalTime of1 = LocalTime.of(12,35,56);System.out.println(of1);LocalDateTime of2 = LocalDateTime.of(1890,12,23,13,24,15);System.out.println(of2);//LocaLDate,LocaLTime用的不如LocalDateTime多// 下面讲解用LocaLDateTime:// 一系列常用的get***System.out.println(localDateTime.getYear());//年System.out.println(localDateTime.getMonth());//月(英语)System.out.println(localDateTime.getMonthValue());//月(数字)System.out.println(localDateTime.getDayOfMonth());//日System.out.println(localDateTime.getDayOfWeek());//星期System.out.println(localDateTime.getHour());//时System.out.println(localDateTime.getMinute());//分System.out.println(localDateTime.getSecond());//秒//不是set方法,叫with//体会:不可变性LocalDateTime localDateTime2=localDateTime.withMonth(8);System.out.println(localDateTime);System.out.println(localDateTime2);//提供了加减的操作:// 加:LocalDateTime localDateTime1=localDateTime.plusMonths(4);System.out.println(localDateTime);System.out.println(localDateTime1);//减:LocalDateTime localDateTime3=localDateTime.minusMonths(5);System.out.println(localDateTime);System.out.println(localDateTime3);}
}

运行结果如下:

日期相关 - DateTimeFormatter

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;public class Test10 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//格式化类:DateTimeFormatter//方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIMEDateTimeFormatter df1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//df1就可以帮我们完成LocalDateTime和string之间的相互转换:// LocalDateTime-->String:LocalDateTime now=LocalDateTime.now();String str = df1.format(now);System.out.println(str);//2020-06-15T15:02:51.29//String--->LocalDateTimeTemporalAccessor parse = df1.parse("2020-06-15T15:02:51.29");System.out.println(parse);//方式二:本地化相关的格式。如:ofLocalizedDateTime()//参数:FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT// FormatStyle.LONG:2020年6月15日下午03时17分13秒// FormatStyle.MEDIUM:2022年5月7日 下午9:13:25// FormatStyle.SHORT:2022/5/7 下午9:02DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);//LocalDateTime-->String:LocalDateTime now1 = LocalDateTime.now();String str2 = df2.format(now1);System.out.println(str2);//String--->LocalDateTimeTemporalAccessor parse1 = df2.parse("2022/5/7 下午9:02");System.out.println(parse1);//方式三:自定义的格式。如:ofPattern("yyyy-MM-dd hh:mm:ss")---》重点,以后常用DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm;ss");//LocalDateTime-->String:LocalDateTime now2 = LocalDateTime.now();String format = df3.format(now2);System.out.println(format);//2020-06-15 03:22:03//String--->LocalDateTimeTemporalAccessor parse2 = df3.parse("2022-05-07 09:15;34");System.out.println(parse2);}
}

运行结果如下:

Math 类

【1】直接使用,无需导包:

package java.lang;

【2】final修饰类,这个类不能被继承:

public final class Math {
}

【3】构造器私有化,不能创建Math类的对象:

/**
* Don't let anyone instantiate this class.*/
private Math() {}

不能:

public static void main(String[] args) {Math m=new Math();}

【4】Math内部的所有的属性,方法都被static修饰:类名.直接调用,无需创建对象:

Math.java

public static final double PI = 3.14159265358979323846;
/**
* Returns the trigonometric sine of an angle. Special cases:<ul><li>If the argument is NaN * * or an infinity, then the* result is NaN.
* <li>If the argument is zero, then the result is a zero with the same sign as the argument.    * </ul>
*
* <p>The computed result must be within 1 ulp of the exact result.* Results must be semi-

* monotonic.
*
* @param       a        an angle, in radians. 
* @return the sine of the argument.
*/

@Contract(pure=true) public static double sin(double a) { return StrictMath.sin(a)}

【5】常用方法:

public class Test01 {//这是一个main方法,是程序的入口: public static void main(String[] args) {//常用属性:System.out.println(Math.PI);//常用方法:System.out.println("随机数:"+Math.random());//[0.0,1.0)System.out.println("绝对值:"+Math.abs(-80));System.out.println("向上取值:"+Math.ceil(9.1));System.out.println("向下取值:"+Math.floor(9.9));System.out.println("四舍五入:"+Math.round(3.5));System.out.println("取大的那个值:"+Math.max(3,6));System.out.println("取小的那个值:"+Math.min(3,6));}
}

运行结果如下:

【6】静态导入

package zuoye15;import static java.lang.Math.*;public class Test01 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//常用属性:System.out.println(PI);//常用方法:System.out.println("随机数:"+random());//[0.0,1.0) System.out.println("绝对值:"+abs(-80));System.out.println("向上取值:"+ceil(9.1)); System.out.println("向下取值:"+floor(9.9)); System.out.println("四舍五入:"+round(3.5)); System.out.println("取大的那个值:"+max(3,6)); System.out.println("取小的那个值:"+min(3,6));}
//如果跟Math中方法重复了,那么会优先走本类中的方法(就近原则) public static int random(){return 100;}
}

运行结果如下:

Random 类

随机数:

package zuoye15;import java.util.Random;public class Test02 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//返回带正号的 double 值,该值大于等于0.0 且小于 1.0。 System.out.println("随机数:"+Math.random());//学习Random类//(1)利用带参数的构造器创建对象:Random r1 =new Random(System.currentTimeMillis()); int i=r1.nextInt();System.out.println(i);//(2)利用空参构造器创建对象:Random r2 =new Random();//表面是在调用无参数构造器,实际底层还是调用了带参构造器System.out.println(r2.nextInt(10));//在0(包括)和指定值(不包括)之间均匀分布的 int值。 System.out.println(r2.nextDouble());//在0.0和 1.0之间均匀分布的 double 值。}
}

运行结果如下:

String 类

String 的本质

String 的常用方法

【1】构造器:底层就是给对象底层的value数组进行赋值操作。

通过构造器来创建对象:

String s1 = new String();
String s2 = new String("abc");
String s3 = new String(new char[] {'a' 'b' 'c'});

【2】常用方法

String s4 = "abc";
System.out.println("字符串的长度为:"+s4.length());
String s5 =new String("abc");
System.out.println("字符串是否为空:"+s5.isEmpty());
System.out.println("获取字符串的下标对应的字符为:"+s5.charAt(1));

【3】equals:

String s6 = new String("abc");

String s7 = new String("abc");
System.out.println(s6.equals(s7));

比较字符串是否相等:

【4】String类实现了Comparable,里面有一个抽象方法叫compareTo,所以String中一定要对这个方法进行重写:

String s8 = new string("abc");
String s9 = new string("abc");
System.out.println(s8.compareTo(s9));

【5】其他常用方法

//字符串的截取:
String s10 = "abcdefhijk";
System.out.println(s10.substring(3));
System.out.println(s10.substring(3,6));//[3,6)

//字符串的合并/拼接操作:
System.out.println(s10.concat("pppp"));

//字符串中的字符的替换:
String s11 = "abcdeahija";
System.out.println(s11.replace( oldChar: 'a', newChar: 'u'));

//按照指定的字符串进行分裂为数组的形式:

String s12 = "a-b-c-d-e-f";
String[] strs = s12.split( regex: "-");
System.out.println(Arrays.toString(strs));

//转大小写的方法:
String s13 = "abc";
System.out.println(s13.toUpperCase());
System.out.println(s13.toUpperCase().toLowerCase())

//去除收尾空格:
String s14 =" abc "; 
System.out.println(s14.trim());//tostring()
string s15="abc";
System.out.println(s15.tostring());

//转换为string类型:
System.out.println(string.valueOf(false));

String 的内存分析

【1】字符串拼接:

public class Test02 {//这是一个main方法,是程序的入口: public static void main(string[] args) {String s1 = "a"+"b"+"c";String s2 = "ab"+"c"; string s3 = "a"+"bc";String s4 = "abc";String s5 = "abc"+"".}}

上面的字符串,会进行编译器优化,直接合并成为完整的字符串,我们可以反编译验证:

然后在常量池中,常量池的特点是第一次如果没有这个字符串,就放进去,如果有这个字符串,就直接从常量池中取:
内存:

【2】new关键字创建对象:

String s6 = new string("abc");

内存:开辟两个空间(1.字符串常量池中的字符串2.堆中的开辟的空间)

【3】有变量参与的字符串拼接:

public class Test03 {//这是一个main方法,是程序的入口: public static void main(string[] args) {String a ="abc".String b = a + "def";System.out.println(b);}
}

a变量在编译的时候不知道a是“abc”字符串,所以不会进行编译期优化,不会直接合并为“abcdef”
反汇编过程: 为了更好的帮我分析字节码文件是如何进行解析的:
利用IDEA中的控制台:

StrinngBuilder 类

【1】字符串的分类:

(1)不可变字符串:String
(2)可变字符串:StringBuilder,StringBuffer
疑问:
(1)可变不可变??
(2)本节课重点:StringBuilder -----》√(3)StringBuilder和StringBuffer区别 ??

【2】StringBuilder底层:非常重要的两个属性:

【3】对应的内存分析

public class Test01 {//这是一个main方法,是程序的入口:public static void main(String[] args) {//创建StrinqBullder的对象:StringBuilder sb3 = new StringBuilder();//表面上调用StrinqBuilder的空构造器,实际底层是对value数组进行初始化,长度为16StringBuilder sb2 =new StringBuilder(3);//表面上调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对 ivalue数组进行初始化,长度为你传入的数字StringBuilder sb = new StringBuilder("abc");sb.append("def") . append("aaaaaaaa"). append("bbb").append("ooooooo");//链式调用方式: return thisSystem.out.println(sb.append("def") . append("aaaaaaaa"). append("bbb").append("ooooooo"));}
}

运行结果如下:

String 和 StringBuilder

【1】String ——> 不可变

【2】StringBuilder ——> 可变

可变,在StringBuilder这个对象的地址不变的情况下,想把“abc”变成“abcdef”是可能的,直接追加即可

public class Test02 {//这是一个main方法,是程序的入口: public static void main(String[] args) { StringBuilder sb = new StringBuilder();System.out.println(sb.append("abc")==sb.append("def"));}
}

运行结果如下:

StringBuilder 和 StringBuffer

StringBuilder常用方法:

public class Test03 {//这是一个main方法,是程序的入口:public static void main(String[] args) {StringBuilder sb=new StringBuilder("nihaojavawodeshijie");//增sb.append("这是梦想");System.out.println(sb);//nihaojavawodeshijie这是梦想// 删sb.delete(3, 6);//删除位置在[3,6)上的字符System.out.println(sb);//nihavawodeshijie这是梦想sb.deleteCharAt(16);//删除位置在16上的字符System.out.println(sb);//nihavawodeshijie是梦想//改-->插入StringBuilder sb1=new StringBuilder("$23445980947");sb1.insert(3, ",");//在下标为3的位置上插入,System.out.println(sb1);StringBuilder sb2=new StringBuilder("$2你好吗5980947");//改-->替换sb2.replace(3,5,"我好累");//在下标[3,5)位置上插入字符串System.out.println(sb2);sb.setCharAt(3,'!');System.out.println(sb);//查StringBuilder sb3=new StringBuilder("asdfa");for (int i = 0; i<sb3.length(); i++) {System.out.print(sb3.charAt(i)+"\t");}System.out.println();//截取String str=sb3.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响System.out.println(str);System.out.println(sb3);}
}

运行结果如下:

StringBuffer常用方法:

public class Test03 {//这是一个main方法,是程序的入口:public static void main(String[] args) {StringBuffer sb=new StringBuffer("nihaojavawodeshijie");//增sb.append("这是梦想");System.out.println(sb);//nihaojavawodeshijie这是梦想// 删sb.delete(3, 6);//删除位置在[3,6)上的字符System.out.println(sb);//nihavawodeshijie这是梦想sb.deleteCharAt(16);//删除位置在16上的字符System.out.println(sb);//nihavawodeshijie是梦想//改-->插入StringBuilder sb1=new StringBuilder("$23445980947");sb1.insert(3, ",");//在下标为3的位置上插入,System.out.println(sb1);StringBuilder sb2=new StringBuilder("$2你好吗5980947");//改-->替换sb2.replace(3,5,"我好累");//在下标[3,5)位置上插入字符串System.out.println(sb2);sb.setCharAt(3,'!');System.out.println(sb);//查StringBuilder sb3=new StringBuilder("asdfa");for (int i = 0; i<sb3.length(); i++) {System.out.print(sb3.charAt(i)+"\t");}System.out.println();//截取String str=sb3.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuffer没有影响System.out.println(str);System.out.println(sb3);}
}

运行结果如下:

String、StringBuffer、StringBuilder区别与联系

1、String类是不可变类,即一日一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。

2、StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String。

3、JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder。

注:

StringBuilder:JDK1.5开始 效率高线程不安全
StringBuffer:JDK1.0开始效率低线程安全

Java 第十五次作业相关推荐

  1. java第十五次作业

    1.1引入包装类 Java中为什么要引入包装类? java中为8种基本数据类型又对应的准备了8种包装类 包装类是引用数据类型,父类是Object. 思考:为什么要再提供8中包装类呢? 假设有这样一个方 ...

  2. 2021年春季学期-信号与系统-第十五次作业参考答案-第十一小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §11 第十一小题 11.使用级联结构实现以下传递函数: ▓ 求解 (1)第一小题 X(z)=1−14z−1(1+1 ...

  3. 2021年春季学期-信号与系统-第十五次作业参考答案-第十小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §10 第十小题 10.使用窗函数法设计一个线性相位FIR滤波器,要求的技术指标为: (1) 在Ωp=30πrad/ ...

  4. 2021年春季学期-信号与系统-第十五次作业参考答案-第九小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §09 第九小题 9.已知模拟滤波器的传递函数为:(1)H(s)=5(s+2)(s+3)\left( 1 \righ ...

  5. 2021年春季学期-信号与系统-第十五次作业参考答案-第八小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §08 第八小题 8.已知全通系统的传递函数为:Hap=z−1−z0∗1−z0z−1H_{ap} = {{z^{ - ...

  6. 2021年春季学期-信号与系统-第十五次作业参考答案-第七小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §07 第七小题 7.已知IIR数字滤波器的传递函数为:H(z)=0.28z2+0.192z+0.05z3+0.65 ...

  7. 2021年春季学期-信号与系统-第十五次作业参考答案-第五小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §05 第五小题 5.设系统的频率特性幅度平方函数的表达式为:(1)∣H(jΩ)∣2=1Ω4+Ω2+1\left( ...

  8. 2021-06-082021年春季学期-信号与系统-第十五次作业-第四小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §04 第四小题 4.已知x[n],y[n]x\left[ n \right],y\left[ n \right]x ...

  9. 2021年春季学期-信号与系统-第十五次作业参考答案-第三小题参考答案

    本文是 2021年春季学期-信号与系统-第十五次作业参考答案 中各小题的参考答案. §03 第三小题 3. 序列x[n]x\left[ n \right]x[n]的长度为8192.已知一台计算机每次的 ...

最新文章

  1. php twig扩展,如何写一个自定义的 Twig 扩展
  2. Moon.Orm性能报告
  3. python 服务器框架_python 服务器框架
  4. NBA球星杜兰特之前投资Coinbse目前已获利达61.5倍
  5. 山东大学计算机专业毕业后,儿子被山东大学数学系录取,毕业之后的前景将会如何...
  6. 使用DeskPins工具钉住窗口
  7. uniapp项目使用mescroll中mescroll-body组件记录
  8. HTML5 学习准备
  9. Rayman的绝顶之路——Leetcode每日一题打卡14
  10. 2017吉比特校招一个编程笔试题
  11. 用JavaScript时钟特效
  12. 操作系统 第九章 死锁
  13. phyper函数计算的显著性到底是什么?
  14. 宏定义和函数有何区别
  15. Opencv contours找出最大轮廓
  16. java母子年龄计算,小明12岁了,妈妈的年龄比小明大20岁,请问几年后妈妈的年龄是小明的两倍。
  17. torch.Tensor常用数据操作汇总与自动求梯度
  18. python爬取豆瓣代码_python爬取豆瓣
  19. 全新的Unity移动游戏优化解决方案
  20. EPS坐标点格式转换

热门文章

  1. mysql:mysql的基本函数
  2. 北京市自动驾驶车辆测试概况
  3. vos3000外呼系统讯时O口网关加密注册 VOS 配置方法
  4. 公司工作流程开发培训
  5. scala case 常用简写
  6. Paypal联手信用卡Discover 打压Square和星巴克威风
  7. Linux节点释放,关于linux:如何释放Inode的使用量?
  8. vue项目中swiper动态更新后无法轮播问题 附带案例代码
  9. 双月报8.24-10.23
  10. 软文营销如何自我激励创造巨大价值