其他的包装类类似
注意:自动装箱右边必须是对应的基本数据类型,不存在转型
经典习题:
三目运算符中,数据类型会自动提升到最高
补充:String 转Integer还有一种方式:Integer.parseInt(string);
-128~127会放在缓存中
// -128-127是直接从缓存中的数组返回,否则新建Integer对象
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
==只要遇到基本数据类型就是判断是否值相等
Serializable表示可以串行化,即对象可以在网络中传播
Comparable表示对象可以比较
String是final修饰的不可以被继承
String有个private final char value[];用来存放字符串内容(char数组value用final修饰,只是说栈里的这个叫value的引用地址不可变。没有说堆里数组本身数据不可变)
String的底层是private final char value[],这边的final和private确保了value数组的地址不会变,但是可以在常量池中新建新的对象,让value数组的引用指向新的对象,所以看似字符串在变,实则是底层的value数组的引用指向在变,value数组的地址并没有变/font>
编译器会优化!!!:如果是常量池中的字符串(常量)拼接会直接用一个对象完成拼接
如果是使用引用(变量)拼接,会新建一个StringBuilder()对象,然后使用它的append()方法
这题比较综合,首先形参是引用类型会影响实参的,其次是因为String是final修饰的,它没有把常量池中的hsp改成java而是新建了一个java,此时形参中str的指向java,实参中的str指向的是hsp
indexOf()和lastIndesOf()除了指定字符也可以是指定的字符串,返回字符串第一个字符出现的下标
注意substring的使用
注意:
format的使用
String s1 = "abc";
String s = "add";
int a = 1;
String ss = String.format("输出%s%s%d", s1, s, a);
String sss = String.format("输出%s%s%d");
System.out.printf("输出%s%s%d%n", s1, s, a);//ok
System.out.println("输出%s%s%d", s1, s, a);//报错,println
System.out.println(ss);//ok
System.out.println(sss,s1,s,a);//报错
System.out.printf(sss,s1,s,a);//ok
主要就是String 中的char[] value是final修饰的,并且存放在常量池中的,而StringBuff中的char[] value没有final修饰,并且是存放在堆中的, 在使用过程中只有长度不够时才会改变引用s的指向
注意:delete,replace中的start,end都是[start,end),会改变原来的字符串,insert是在指定索引前面插入字符串
StringBuff的append方法中,如果传的是null会调用父类的appendNull方法,该方法把null字符数组{‘n’,‘u’,‘l’,‘l’}放进了byte[]数组中。
注意:round()方法就是加上0.5向下取整
输出[a,b]的随机整数x
(int)a<=x<=(int)(a+Math.random()*(b-a+1))
因为,Math.random()是[0,1)
Integer[] arr = new Integer[10];
for (int i = 0; i < 10; i++) {
arr[i] = (int) (Math.random() * 100);
}
// 重写了Comparator方法,这个方法会影响底层二叉排序的判定,如果返回结果(o1-o2)大于0就交换o1和o2的位置(o1>o2就换位置),小于0就不交换位置
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Integer integer01 = (Integer) o1;
Integer integer02 = (Integer) o2;
return integer01 - integer02;
}
});
for (Integer integer : arr) {
System.out.println(integer + " ");
}
binarySearch(arr , key)方法是二分查找,要求数组必须是有序的,如果找到则返回下标,找不到返回-(把key插入数组中后所在下标+1)
4)拷贝arr数组中长度为arr.length个元素
5)数组中所有元素都设置为99
6)比较两个数组中的元素是否一致
7)转成集合, [2,3,4,5,6,1]
tip:一个类重写了finalize()方法后,当出现空的引用时,可以调用系统的gc
1)exit(0),0代表正常状态退出
2)arraycopy(src,0,dest,0,3),从src的下标0开始拷贝到dest数组的0位置,拷贝长度为3个元素
3)返回的是long类型
BigInteger的
注意:BigInteger(String s),int类型传参的构造器是私有的,一般里面只能传字符串
注意:BigDecimal()里面可以放数字int的double的都可以,除的时候BigDecimal.ROUND_CEILING可以保留分子精度
BigDecimal.ROUND_CEILING已经弃用
现在要先用setScale设置精度
BigDecimal bigDecimal = new BigDecimal("923252.22322322");
BigDecimal res2 = bigDecimal.multiply(new BigDecimal("123.543253"));
BigDecimal bigDecimal1 = res2.setScale(5, RoundingMode.CEILING);
System.out.println(bigDecimal1)
这边的calendar是单例设计模式
注意:getMonth() 英文的月份 getMonthValue() 数字月份