对应第3章
别名
类对象互为别名时它变它也变。
class Tank {
int level;
}
public class Assignment {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.level = 47;
t1 = t2;
t1.level = 27;
print("3: t1.level: " + t1.level +
", t2.level: " + t2.level);
}
} /* 最后一个输出t1.level: 27, t2.level: 27 */
t1 = t2;让t1 t2互为别名,实质是指向相同对象。
随机数
头文件:java.util.Random
法一:Random rand=new Random(); //默认系统时间作为种子
法二:Random rand=new Random(44); //自己定义种子
rand.nextInt()、 rand.nextInt(10) //产生[0,10)间随机整数
rand.nextLong()、rand.nextFloat()、rand.nextDouble()
rand.nextBoolean()
求随机整数,例如int i=rand.nextInt()%100;头文件:java.lang.Math.Random
[0,1)间随机double值:double t=Math.random();
判断对象是否相等
例:
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2); //false
System.out.println(n1.equals(n2)); //true
int n3=47,n4=47;
System.out.println(n3 == n4); //true
//System.out.println(n3.equals(n4)); // 写成int 不能用equals()方法
说明:==、!=比较的是对象的句柄,equals()比较的也是对象的句柄。但是大多数java类库对equals()重写了让它实现比较对象的内容,包括Integer类等。
解决办法:
对于Java类库里类的对象,用equals()方法;对于写成int、double 等形式的,用==、!=;对于自己写的类,可以自己在类中重写equals()
例:自定义equals()
class Value {
int i;
public boolean equals(Value t)
{
if(i==t.i)
return true;
else
return false;
}
}
数的运算
转为二进制:
System.out.println(Integer.toBinaryString(-3)); //11111111111111111111111111111101
long l = -1;
System.out.println(Long.toBinaryString(l));
移位运算
移位符共有3种,<< >> >>>
<<:左移,左移一位表示乘2
>>:右移, 右移一位表示除2,高位补符号位
>>>:无符号右移,高位补0
移位符号可以与等号组合用。
int i=24; i >>2是个值,i >>=2;可以做个表达式
位运算符:
& 与 | 或 ~非 ^ 异或
数字的表示
数字前 0x表示十六进制,0表示八进制
数字后,long简写l或L,float简写f或F,double简写d或D
例:float f=1e-47f; byte b=0x7f;
易错:如果float f=1e-47;会出错。因为1e-47默认当做double处理,如果不加结尾的f相当于把double赋给float
调用static方法
自己写了很多源文件放在my_code文件夹下,现在需要在项目project1中用到源文件,举例:
有个源文件是Print.java,里面有static方法
public static void print(Object obj) {
System.out.println(obj);
}
调用:
先把my_code文件夹放在project1/src下,
调用的文件中两种写法:
若添加import my_code.*; 则如下 Print.print(“hello”);
若添加import static my_code.Print.*;(即一直import到类名),调用如下直接用方法名 print(“hello”);