包装类
八个基本数据类型 -> 八个包装类
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)]