包装类、String

包装类

八个基本数据类型 -> 八个包装类
	byte   ->  Byte
	short  ->  Short
	char   ->  Character
	int    ->  Integer
	long	->	Long
	float	->	Float
	double	->	Double
	boolean	->	Boolean
jdk12 Integer中的所有构造器都过时了,通过valueOf方法获取int对应点Integer对象
String	->	int		用Integer.parseInt();//可能报异常
int		->	String 	用String.valueOf()
public class BaoZhuang {
	public static void main(String[] args) {
		System.out.println("BYTES:"+Integer.BYTES);
		System.out.println("MAXVALUE:"+Integer.MAX_VALUE);
		System.out.println(Integer.MIN_VALUE);
		System.out.println("SIZE:"+Integer.SIZE);
		System.out.println(Integer.TYPE);
		Integer in1 = new Integer(12);
		System.out.println(in1);
		//String->int 用 Integer.parseInt();
		Integer in2 = new Integer("123");
		System.out.println(in2);
		System.out.println(Integer.max(12,30));
		System.out.println("2进制:"+Integer.toBinaryString(Integer.MAX_VALUE));
		//parseInt(String)
		System.out.println("字符串转为int:"+Integer.parseInt("1234"));
		//获取Integer对象   int ->String	 String.valueOf()
		Integer in3 = Integer.valueOf(12);
		System.out.println(in3);
					
		Integer in4 = Integer.valueOf("12");
		System.out.println(in4);
	}
}

自动拆装箱

jdk1.5之后支持自动拆装箱,本质上就是调用了
	装箱:Integer.valueOf()
	拆箱:对象.intValue()
	自动装箱时,首先会判定当前的值是否在缓冲区[-128,127],如果在,会直接从缓冲区中获取对应的Integer对象,如果不在,就会重新创建一个新的Integer对象(可以看源码得知)
public class Test02 {
	public static void main(String[] args) {
		
		Integer in1 = 123;//jdk1.5之后支持自动装箱  Integer.valueOf(123);
		int num = in1;//jdk1.5之后支持自动拆箱 in1.intValue();
		
		
		Integer in2 = 88;
		Integer in3 = 88;
		System.out.println(in2==in3);
		
//200不在[-128,127]之间
		in2 = 200;
		in3 = 200;
		System.out.println(in2==in3);
		
		
		
	}
}

Boolean

1. 字面值创建Boolean对象时,只能指定true和false,并且创建的对象	也是对应的true和false
2. 字符串创建Boolean对象时,只要字符是true和false,无所谓大小写,得到对应的Boolean对象就是与之对应的true和false,其他所有字符串都是false
public class Test03 {
	public static void main(String[] args) {
		
		// 创建Boolean对象
		Boolean f1 = new Boolean(true);
		System.out.println(f1);
		
		f1 = new Boolean(false);
		System.out.println(f1);
		
		f1 = new Boolean("1");
		System.out.println(f1);
		
		f1 = new Boolean("0");
		System.out.println(f1);
		
		f1 = new Boolean("TRue");
		System.out.println(f1);
		
		f1 = new Boolean("False");
		System.out.println(f1);
		
		f1 = new Boolean("123");
		System.out.println(f1);
		
	}
}

和时间Date有关的类

Date:空构造器对象创建出的是当前系统时间对象
	//创建时间对象
		Date d = new Date();
	//通过带参构造器构建对象
		Date date = new Date(long L);
	//获取毫秒数
		long dateTime = System.currentTimeMillis();
		SimpleDateFormat sd = new SimpleDateFormat();
	//设置一下输出的内容格式
	sd.applyPattern("yyyy年MM月dd日 HH时mm分ss秒 是一年中的第D天  W w");
	//调用格式化方式
        String str =  sd.format(date);
        System.out.println(str);
	
	 SimpleDateFormat ss = new 	 SimpleDateFormat("yy//mm//dd hh:mm:ss");
        System.out.println(ss.format(date));

Scanner

hasNextXXX:	获取扫描到的数据是否为XXX类型
nextXXX:	获取下一个扫描到的内容转为XXX类型(转换过程中有可能					存在问题)

String

字符串:一组字符序列(不可变的串)
	创建String对象可以使用以下:
		1. new String();
				String str1 = new String();//是一个""对象
				System.out.println(str1);
		2. new String("abc")
		
		3. 直接写 "love"
			String str2 = "love"
		4. new String(buf,2,2)//通过字节数组创建
			String str4 = new String(buf);
		System.out.println("通过字节数组创建字符串:"+str4);
		str4 = new String(buf,2,2);
		System.out.println("通过字节数组创建字符串:"+str4);

StringBuffer:可变的,因为底层就是一个字符数组,动态的数组
StringBuilder:
	StringBuffer和StringBuilder都继承了AbstractStringBuilder
  
  StringBuffer效率低于StringBuilder
  StringBuffer安全性要高于StringBuilder
  一般情况下使用StringBuilder
  
  jdk9之后  String中存储数据通过byte数组存储 + 变量
  jdk中对于String存储时的内容消耗极大降低


String常见的方法:
	charAt(int index)	返回当前索引位置上的指定字符
	codePointAt(index)	返回指定索引位置上的元素代码点
	compareTo(String)	比较两个字符串的大小
compareToIgronCase(String)	比较两个字符串的大小(忽略大小写)
	concat(String)		拼接之后的结果
	copyValueOf(char[])		复制字符
	getBytes				获取字符串的字节数组
	getChars();			获取字符串的字符数组
	indexOf				返回负数代表未找到
	isEmpty()			查看数组是否为null
	repleace			替换之后的结果
	splite				分隔
	subString			截取字符串
	toUpperCase()		转为大写
	toLowerCase()		转为小写
通过静态方法创建String对象	String str1 =String.valueOf(123);
package com.mage.Str;

import java.util.Arrays;



//String的常见方法
public class Test02 {
	public static void main(String[] args) {
	
	//创建String对象,返回当前索引上的指定字符charAt(int index);
	String str = new String("li中zhengyang");
	char ch = str.charAt(2);
	System.out.println(ch);
	
	//返回指定索引位置上的元素的代码点codePointAt(int index)
	int num = str.codePointAt(2);
	System.out.println(num);
	
	//比较两个字符串的大小compareTo(String)返回的是int,负数代表前面小于后面其实代表小于多少
	String str2 = "li中zhengyang";
	int flag = str.compareTo(str2);
	System.out.println(flag);
	
	//忽视大小写compareToIgronCase(String)
	str2 = "Li中ZHENGYang";
	flag = str2.compareToIgnoreCase(str);
	System.out.println(flag);
	
	//连接concat(String)
	char[] ch1 = new char[] {'加','油'};
	String str3 = new String(ch1,0,1);
	str = str.concat(str3);
	System.out.println("str是:"+str);
	//复制元素copyValueOf(char[])
	String str4 = String.copyValueOf(ch1,0,2);
	System.out.println("str4:"+str4);
	
	//endWith(String);
	String str5 = "成都.mp4";
	
	boolean b = str5.endsWith(".mp4");
	System.out.println("是否以.mp4结尾:"+b);
	
	//获取字符串的字节数组
	ch1 = new char[10];
	//从str的2索引处开始  到str的第5个索引结束(不包含)  复制到ch1字符数组中 从第1个位置开始
	str.getChars(0,3,ch1,2);
	System.out.println(""+Arrays.toString(ch1));
	
	//indexOf 返回负数代表未找到
	String str6= "hehe.avi.png";
	int num2 = str6.indexOf(".");
	System.out.println(".在String中第一次出现的位置:"+num2);
	num2 = str6.indexOf(".",5);
	System.out.println(".在string中最后一次出现的位置是:"+num2);
	//isEmpty()
	System.out.println("查看数组是否为null:"+str.isEmpty());
	//repleace
	str = "hehe.avi.png";
	str = str.replace(".", "+");
	System.out.println("替换之后的结果:"+str);
			
	//split
	str = "login?ume=zs&pwd=zs";
	String[] strs = str.split("\\?");
	for(String st:strs) {
		System.out.println(""+st);
		
	}
	System.out.println("======");
	String parms = strs[1];
	strs = parms.split("&");
	for(String string:strs) {
		String[] ss = string.split("=");
		System.out.println(ss[1]);
	}
	//subString
	str = "login?unme=zs&pwd=zs";
	str = str.substring(4);// 从4索引开始截取到结束
	System.out.println("截取字符串:"+str);
			
	str = str.substring(2, 7);//从2索引开始截取 到索引为7结束不包含7
	System.out.println("截取字符串:"+str);
			
			
			
	str = "login?unme=zs&pwd=zs";
	str = str.toUpperCase();
	System.out.println("转为大写:"+str);
			
	str = str.toLowerCase();
	System.out.println("转为小写:"+str);	
	
	//通过静态方法创建String
	String str7 = String.valueOf(345);
	System.out.println("通过静态方法创建:"+str7);
			

	//通过静态方法创建String对象
	String str1 = String.valueOf(123);
	System.out.println(str1);
	
	//对象转字符串 其实就是调用当前对象的toString方法
	User u = new User(10);
	String str8 = String.valueOf(u);
	System.out.println(str8);
	
	
	
}
}

class User{
	private int age;
	public User() {
		// TODO Auto-generated constructor stub
	}
	public User(int age) {
		super();
		this.age = age;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
	this.age = age;
}
		@Override
	public String toString() {
			return "User [age=" + age + "]";
}


}

例题:

package com.mage.common;

//intern 获取到的是当前String对象的地址
public class Test01 {
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
        
        String s4 = s1.intern();
        System.out.println("s1 == s4 :"+(s1==s4));
        System.out.println("s3 == s4 :"+(s4==s3));

    }
}


内存分析
[外链图片转存失败(img-Pv4EiKY6-1564060742730)(https://i.loli.net/2019/07/25/5d39ac429d48288287.png)]
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值