1、String类型面试题
public static void main(String[] args) {
//demo1();
//demo2();
//demo3();
//demo4();
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2); //false
System.out.println(s3.equals(s2)); //true
}
private static void demo4() {
//byte b = 3 + 4; //在编译时就变成7,把7赋值给b,常量优化机制
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2); //true,java中有常量优化机制
System.out.println(s1.equals(s2)); //true
}
private static void demo3() {
String s1 = new String("abc"); //记录的是堆内存对象的地址值
String s2 = "abc"; //记录的是常量池中的地址值
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
}
private static void demo2() {
//创建几个对象
//创建两个对象,一个在常量池中,一个在堆内存中
String s1 = new String("abc");
System.out.println(s1);
}
private static void demo1() { //常量池中没有这个字符串对象,就创建一个,如果有直接用即可
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
}
}
2、可变参数
只确定参数类型,不确定参数个数,参数可以是0~多个
格式:数据类型... 变量名
//可变参数
public int add(int... a) {//可变参数在执行的过程中会变成对应类型的数组
int sum = 0;
for (int i : a) {
sum += i;
}
return sum;
}
注意:1、可变参数(即使参数类型不相同)只能在参数列表的最后一位
因为像public int add(int... a,int b) {
int sum = 0;
for (int i : a) {
sum += i;
}
return sum;
}//在调用的时候,不知道是传入的参数是可变参数的还是后面的int类型的
2、一个方法不可以有多个可变参数
3、值传递和引用传递
值传递:
引用数据类型:
4、常用的API
Object
包装类:byte short char int float double long boolean
Byte Short Character Integer Float Double Long Boolean
自动装箱和自动拆箱
自动装箱: 基本数据类型自动转换为对应的引用数据类型
自动拆箱: 包装类型 自动转换为对应基本数剧类型
Integer为例
Integer i = 10;//自动装箱 Integer i1 = new Integer(10);
Integer i2 = new Integer("10");
int num2 = i2;//自动拆箱
注意 Integer自动装箱的范围是byte类型的范围:-128~127,
如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取
如果超过了byte取值范围就会再新创建对象
Math类的常用方法:
public static void main(String[] args) {
//double abs(double num) 将参数的绝对值返回出去 |-10|
double a1 = Math.abs(10);//10
double a2 = Math.abs(-10);//10
System.out.println("abs:"+a1);
System.out.println("abs:"+a2);
System.out.println("*************");
//cbrt() 返回参数的立方根
double a3 = Math.cbrt(27);//3
double a4 = Math.cbrt(8);//2
System.out.println("cbrt:"+a3);
System.out.println("cbrt:"+a4);
System.out.println("*************");
//sqrt(a) 返回参数的平方根
double c1 = Math.sqrt(4);
double c2 = Math.sqrt(9);
System.out.println("sqrt:"+c1);
System.out.println("sqrt:"+c2);
System.out.println("*************");
//ceil()返回 大于等于参数的 最小整数
double a5 = Math.ceil(3.14);//4
double a6 = Math.ceil(-3.14);//-3
System.out.println("ceil:"+a5);
System.out.println("ceil:"+a6);
System.out.println("*************");
//floor() 返回小于等于参数的 最大整数
double a7 = Math.floor(3.14);//3
double a8 = Math.floor(-3.14);//-4
System.out.println("floor:"+a7);
System.out.println("floor:"+a8);
System.out.println("*************");
//max() 返回两者较大值
double b1 = Math.max(10, 20);
//min() 返回两者较小值
double b2 = Math.min(10, 20);
System.out.println("max:"+b1);
System.out.println("min:"+b2);
System.out.println("*************");
//pow(a,b) 返回a的b次方
double b3 = Math.pow(2, 3);
double b4 = Math.pow(3, 2);
System.out.println("pow:"+b3);
System.out.println("pow:"+b4);
System.out.println("*************");
//random() 产生一个随机数[0,1)
double b5 = Math.random();
double b6 = Math.random();
//FAQ? 随机一个 [21,50)整数 r.nextInt(29)+21;
//(int)(Math.random()*29+21)
System.out.println("random:"+b5);
System.out.println("random:"+b6);
System.out.println("*************");
//round() 返回参数四舍五入的值 数值加0.5后取floor
double b7 = Math.round(3.14);//3
double b8 = Math.round(3.51);//4
System.out.println("round:"+b7);
System.out.println("round:"+b8);
System.out.println("*************");
//toDegrees(a) 将弧度a 转化为角度返回出去
double c3 = Math.toDegrees(2);
double c4 = 180/Math.PI*2;
System.out.println("toDegrees:"+c3);
System.out.println(c4);
System.out.println("*************");
//toRadians(a) 将角度a 转化为弧度返回出去
double c5 = Math.toRadians(90);
double c6 = Math.PI/180*90;
System.out.println("toRadians:"+c5);
System.out.println(c6);
System.out.println("*************");
}
System
public class SystemDemo {
public static void main(String[] args) {
//static currentTimeMillis() 返回一个long类型 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
long sc = System.currentTimeMillis();
//System.out.println(sc);
// 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
//System.arrayCopy(Object src, int srcPos,Object dest, int destPos, int length)
int[] dest = new int[10];
int[] src = {1,2,3,4,5};
System.arraycopy(src, 2, dest, 3, 3);
System.out.println(Arrays.toString(dest));
//System.exit(0);//程序退出
System.out.println("abc");
System.err.println("Error******8");//不一定在哪里输出,可能在“abc”之前,也可能在之后
}
}