java包装类

包装类

8个基本类型:byte 1 short 2 int 4 long 8 float 4 double 8 char 2 boolean 2

在java中,有些情况下不能用基本类型,所以每种基本类型都声明了对应的类类型,成为包装类

例如集合

byte Byte

short Short

int Integer

long Long

float Float

double Double

boolean Boolean

char Char

【说明】基本类型和包装类型之间自动转换

包装类的作用:

  1. 让基本类型作为引用类型来使用
  2. 类中封装了一些方法,类型转换的方法

装箱:把子类类型转换父类类型,把基本类型转换为引用类型 自动完成

拆箱:把父类类型转换为子类类型(强转),把引用类型转为基本类型(自动完成)

【说明】把字符串转为数值时,字符串里必须都是数值才行,否则转换失败

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5PPPeVUM-1629105851889)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210813105116134.png)]

由于整型值比较常用所以Java默认缓存了256个整型值

-128~127之间的值,所以当使用此范围之间的数值时,公用缓存区地址中的数值,如果超出范围,那将独立开辟空间存储

String 重点

String:不可变字符串,不能改变里面的值

本质:是一个final修饰的char类型的数组,所以字符串一旦赋值后,不能改变其值

​ private final char value[];

使用方式1:
String name1=“贾玉堃”;
使用方式2:
String name2=new String(“张磊”);

//使用方式1:
		String name1="贾玉堃";
		//使用方式2:
		String name2=new String("张磊");
		
		//为什么没有输出应用类型的地址?
		//因为重写了toString方法
		System.out.println(name1);
		System.out.println(name2);
		//改变字符串的值,改变的并不是原字符串的值
		//新开辟方法区中常量池的空间,存放改变后的字符串的值
		name1=name1+",生日快乐!";
		System.out.println(name1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRajK6iy-1629105851892)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210815120403523.png)]

package com.qf.pro2103.day15;

public class Demo7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String name="贾玉堃";
		//每次存放字符串的时候,到常量池中查找,此字符串值是否存在
		//如果有,则直接复用其地址
		String name2="贾玉堃";
		System.out.println(name==name2);
		System.out.println(name.equals(name2));
		name2=name2+",生日快乐!";
		System.out.println(name==name2);
	}

}

字符串重用方法:

length() 字符串中字符的个数

charAt(索引) 返回的是字符串中对应索引位置的字符

contains(字符串) 返回boolean值,判断参数字符串是否在字符串中,如果在,返回true,不在,返回false

toCharArray() 把字符串转换为字符型数组

indexOf(参数字符串) 查找参数字符串在字符串中首次出现的索引位置,如果不在返回-1

trim() 去除字符串两端的空格,返回是去除两端空格后的字符串

replace(“要替换的内容”,“替换成的内容”) 把字符串中参数1的部分,用参数2给替换掉

toUpperCase() 把字符串中的小写字母转为大写

toLowerCase() 把字符串中的大写字母转为小写

endsWith(参数) 判断字符串是否以参数结尾,如果是返回true,否则返回false

split(分割标记) 把字符串按照参数进行分割,返回分割后的数组s4

substring(beginindex) 从字符串的参数所指的索引位置开始截取,一直截取到最后,返回截取到的字符串

substring(beginindex,endindex) 从字符串的参数1的索引位置开始截取,截取到参数2所对应的索引位置,但是不包含参数2的位置

【面试题】中间空格如何去掉?

【说明】String类的方法并不是直接修改原字符串,而是复制一份进行修改,返回的对赋值的修改后的字符串

【说明】String是不可变字符串,当频繁改变字符串值时,不建议使用String ,浪费内存空间

使用 StringBuffer 或 StringBuilder,可变字符串

StringBuffer和StringBuilder的使用方式是相同的

区别:

StringBuffer:线程安全,但是效率较低

StringBuilder:非线程安全,但是效率高

package com.qf.pro2103.day15;

public class Demo10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuffer sb=new StringBuffer("贾玉堃");
		//给上面的字符串拼接值
		sb.append(",你在干什么?");  //追加
		System.out.println(sb);
		//参数1:插入的索引位置
		//参数2:插入的内容
		sb.insert(0, "嗨!");  //插入
		System.out.println(sb);
		sb.insert(5,",正在上课呢");
		System.out.println(sb);
		//sb.deleteCharAt(0); //删除指定索引位置的字符
		sb.delete(0, 2);  //从参数1的位置开始删除,删除到参数2的位置,但是不包含参数2
		System.out.println(sb);
	}

}
BigDecimal

基本类型中的float,double 存放的是近似值,不能用作价钱来使用

BigDecimal是精确存储及计算的小数类型

package com.qf.pro2103.day15;

import java.math.BigDecimal;

public class Demo11 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//精确计算
		int num=10;
		BigDecimal price=new BigDecimal("0.5");
		BigDecimal totalPrice=price.multiply(new BigDecimal(num));
		System.out.println(totalPrice);
		
		BigDecimal first=new BigDecimal("1.0");
		BigDecimal second=new BigDecimal("0.9");
		
		BigDecimal add=first.add(second); //加法
		BigDecimal sub=first.subtract(second);//减法
		BigDecimal mul=first.multiply(second); //乘法
        //参数1:除数
        //参数2:保留的小数位数
        //参数3:如何保留,通常四舍五入
		BigDecimal div=first.divide(second,3,BigDecimal.ROUND_HALF_UP);//除法
		System.out.println(add);
		System.out.println(sub);
		System.out.println(mul);
		System.out.println(div);
	}

}

【说明】在计算时,小数要以字符串形式参与,这样是精确数

​ 在除法计算时,遇到除不开的情况需要指定,保留的小数位数,及如何取舍

日期时间

Date 默认是西方的时间格式,不符合中国的时间认知格式,需要进行格式转换

SimplDateFormat 对时间进行格式化

时间工具类

package com.qf.pro2103.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
	//得到一个符合中国时间格式的字符串时间
	public static String getDateTime(){
		//1、先创建时间对象
		Date date=new Date();
		//2、创建格式化对象
		//在参数中指定时间格式
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		//3、对时间进行格式化
		String str=sdf.format(date);
		return str;
	}
}
package com.qf.pro2103.day15;

import java.util.Date;

import com.qf.pro2103.util.DateUtil;

public class Demo12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Date dt=new Date();
		//输出当前时间
		System.out.println(dt);
		//变成  年-月-日  小时:分:秒
		String str=DateUtil.getDateTime();
		System.out.println(str);
	}

}

如果要获取当前时间中的一部分,使用日历对象

package com.qf.pro2103.day15;

import java.util.Calendar;

public class Demo13 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//getInstance()  得到日历对象,在此方法中new出的日历对象
		Calendar calendar=Calendar.getInstance();
		//日历中默认是当前时间
		//通过日历对象来获取信息
		int year=calendar.get(Calendar.YEAR);
		System.out.println(year);
		int month=calendar.get(Calendar.MONTH);
		//月份:0-11
		System.out.println(month+1);
		//日期
		int day=calendar.get(Calendar.DAY_OF_MONTH);
		System.out.println(day);
		//小时
		int hour=calendar.get(Calendar.HOUR_OF_DAY); //24小时制   HOUR 12小时制
		System.out.println(hour);
		//分钟
		int minute=calendar.get(Calendar.MINUTE);
		System.out.println(minute);
		//秒
		int second =calendar.get(Calendar.SECOND);
		System.out.println(second);
		
	}

}

通过修改日历来设置时间 增加、减少时间

package com.qf.pro2103.day15;

import java.util.Calendar;

public class Demo14 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar calendar=Calendar.getInstance();
		//设置日期
//		calendar.set(Calendar.DAY_OF_MONTH, 5);
//		
//		System.out.println(calendar.getTime());
		//当前时间两个小时后的时间
		calendar.add(Calendar.HOUR_OF_DAY, 2);
	}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lF57nUb5-1629105851894)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210815120811880.png)]

System.exit(0) 正常退出:程序在退出前会释放掉/清理掉所有占用资源

System.exit(非0) 异常退出:程序退出后,没有释放掉所占资源

package com.qf.pro2103.day15;

public class Demo15 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//是1970年1月1日0时0分0秒到此刻的毫秒数     long类型
		System.out.println(System.currentTimeMillis());
		//用于记录程序执行所用时间
		long beginTime=System.currentTimeMillis();
		int sum=0;
		for(int i=1; i<=10000000; i++){
			sum+=i;
		}
		long endTime=System.currentTimeMillis();
		//计算所用时间
		long useTime=endTime-beginTime;
		System.out.println("循环10000000次用时:"+useTime);
	}

}

0分0秒到此刻的毫秒数 long类型
System.out.println(System.currentTimeMillis());
//用于记录程序执行所用时间
long beginTime=System.currentTimeMillis();
int sum=0;
for(int i=1; i<=10000000; i++){
sum+=i;
}
long endTime=System.currentTimeMillis();
//计算所用时间
long useTime=endTime-beginTime;
System.out.println(“循环10000000次用时:”+useTime);
}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值