包装类
概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
byte--->Byte
short--->Short
int--->Integer
long-->Long
char-->Character
float-->Float
double-->Double
boolean--->Boolean
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型。
用Integer与 int为例:
基本数值---->包装对象
包装对象---->基本数值
自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
基本类型与字符串之间的转换
基本类型直接与””相连接即可;如:34+""
String转换成对应的基本类型
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。
以Integer类的静态方法parseXxx为例
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。
示例:
字符串String类
String构造函数
String常用方法
public char charAt(int index) |
根据下标获取字符 |
public boolean contains(String str) |
判断当前字符串中是否包含str |
public char[] toCharArray() |
将字符串转换成数组。 |
public int indexOf(String str) |
查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1 |
public int length() |
返回字符串的长度 |
public String trim() |
去掉字符串前后的空格 |
public String toUpperCase() |
将小写转成大写 |
public boolean endsWith(String str) |
判断字符串是否以str结尾 |
public String replace(char oldChar,char newChar) |
将旧字符串替换成新字符串 |
public String[] split(String str) |
根据str做拆分 |
public String subString(int beginIndex,int endIndex) |
在字符串中截取出一个子字符串 |
三、可变字符串
概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串。
Java中提供了两个可变字符串类:
StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全。
这两个类中方法和属性完全一致
验证StringBuilder效率高于String。
常用的方法:
方法名 |
属性 |
public StringBuilder append(String str) |
追加内容。 |
public StringBuilder insert(int dstOffset, CharSequence s) |
将指定 字符串插入此序列中。 |
public StringBuilder delete(int start, int end) |
移除此序列的子字符串中的字符。 |
public StringBuilder replace(int start, int end, String str) |
使用给定字符串替换此序列的子字符串中的字符。start开始位置、end结束位置。 |
public int length() |
返回长度(字符数)。 |
日期
Date
●Date表示特定的瞬间,精确到毫秒。
●Date类中的大部分方法都已经被Calendar类中的方法所取代。
●时间单位
○1秒=1000毫秒
○1毫秒=1000微秒
○1微秒=1000纳秒
Calendar
- Calendar提供了获取或设置各种日历字段的方法。
- protected Calendar() 构造方法为protected修饰,无法直接创建该对象。
常用方法:
方法名 |
说明 |
static Calendar getInstance() |
使用默认时区和区域获取日历 |
void set(int year,int month,int date,int hourofday,int minute,int second) |
设置日历的年、月、日、时、分、秒。 |
int get(int field) |
返回给定日历字段的值。字段比如年、月、日等 |
void setTime(Date date) |
用给定的Date设置此日历的时间。Date-Calendar |
Date getTime() |
返回一个Date表示此日历的时间。Calendar-Date |
void add(int field,int amount) |
按照日历的规则,给指定字段添加或减少时间量 |
long getTimeInMillis() |
毫秒为单位返回该日历的时间值 |
SimpleDateFormat
SimpleDateFormat是以与语言环境有关的方式来格式化和解析日期的类。
进行格式化(日期 -> 文本)、解析(文本 -> 日期)。
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区
BigDeicmal基本用法
很多实际应用中需要精确计算,而double是近似值存储,不再符合要求,需要借助BigDecimal。
为什么使用BigDecimal?
位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd=new BigDecimal(“1.0”)。
常用方法:
方法名 |
描述 |
BigDecimal add(BigDecimal bd) |
加 |
BigDecimal subtract(BigDecimal bd) |
减 |
BigDecimal multiply(BigDecimal bd) |
乘 |
BigDecimal divide(BigDecimal bd) |
除 |
除法:divide(BigDecimal bd,int scal,RoundingMode mode)。
参数scale :指定精确到小数点后几位。
参数mode :
指定小数部分的取舍模式,通常采用四舍五入的模式。
取值为BigDecimal.ROUND_HALF_UP。
System
System系统类,主要用于获取系统的属性数据和其他操作。
常用方法:
方法名 |
说明 |
static void arraycopy(...) |
复制数组 |
static long currentTimeMillis() |
获取当前系统时间,返回的是毫秒值 |
static void gc(); |
建议JVM赶快启动垃圾回收器回收垃圾 |
static void exit(int status) |
退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm。 |
示例:
七、对象内存分析
按值传递
按址传递
class Person{ int age; String name; public Person(String name,int age){ this.name = name; this.age = age; } public void eat(){ System.out.println("吃东西。。"); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name='" + name + '\'' + '}'; } }
public class Demo { public static void test(int i){ System.out.println(i); i = 100; System.out.println(i); } public static void test2(Person person){ person.setName("wowo"); } public static void main(String[] args) { Person p1 = new Person("王二狗",5); Person p2 = new Person("李晓华",12); Person p3 = p1; System.out.println(p1); System.out.println(p2); System.out.println(p3); test2(p3); System.out.println(p3); System.out.println(p1); int a = 5; test(a); System.out.println(a); } }
最后
本期结束咱们下次再见👋~
🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗