- 表格显示
- 引用数据类型
- Switch能否用string作参数
- equals与==的区别
- Object有哪些公用方法
- Java的四种引用,强弱软虚,用到的场景
表格显示
基础表格显示
基本类型 | 大小(字节) | 默认值 | 封装类 |
byte | 1 | (byte)0 | Byte |
short | 2 | (short)0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | double |
boolean | - | false | Boolean |
char | 2 | \u0000(null) | Character |
void | - | - | Void |
八中数据结构基本类型为:byte,short,int,long,float,double,boolean,char。
封装类分别是:Byte,Short,Integer,Long,Float,Double,Boolean,Character。
引用数据类型
引用数据类型都是由类的编辑器定义的,他们适用于访问对象的。这些变量被定义为不可改变的特定类型。
例如:Employee,Pubby等。
- 类对象和数组的变量就是这种引用数据类型。
- 任何引用类型的默认值都为空。
- 一个数据的引用类型可以被用作任何声明类型和兼容类型的对象。
Switch能否用string作参数
JDK1.7之前switch只能用byte,int,short,char四种数据类型和其封装类。
switch后面的括号也只能放入int类型的值,但是由于byte,short,char(根据有小到大的排列)他们可以自动转为int类型,所以他们也可以被switch使用。
JDK1.7整形之后,枚举类型和字符串就都可以被使用。
以下为JDK1.7之前的代码说明。
switch(empression);\\括号里是一个表达式,也可以是一个整数
{ case constant 1:
group of statements 1;
break;
case constant 2:
group of statements 2;
break;
······
default
defult of statements;
}以下为JDK1.7整改后的代码,枚举,字符串,整形都可以。
public class Teststring;
{
static String string = "123";
public static void main(String[] args){
switch (string){
case "132":
System.out.println("132");
break;
case "abc":
System.out.println("abc");
break;
default:
System.out.println("defaults");
break;
}
}
}JDK1.7修改后,并未添加新的指令来处理switch string,只是可以用switch中的string.hashCode,将string转为int从而进行判断。
equals与==的区别
使用==比较原生类型如:boolean,int,char等等,使用equal()比较对象。
1.==是判断两个变量或实例是不是指向同一个内存空间。equals是判断两个变量或实例所指向的内存空间的值是不是相同。
2.==是指对内存地址进行比较。equals()是对字符串的内容进行比较。
3.==指引用是否相同。equals()指的是值是否相同。
public static void main(String[] args){
String a = new String ("ab");//a为一个引用
String b = new String ("ab");//b为另一个引用,对象的内容一样
String aa = "ab";//放在常量池中
String bb = "ab";//从常量池中查找
System.out.println(aa == bb);//ture
System.out.pringln(a == b);//false,非同一对象
System.out.println(a.equals(b));//true
System.out.pringtln(42 == 42.0);//true
}
public static void main(String[] args){
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2));//false
System.out.println(obj1==obj2);//false
obj1=obj2;
System.out.println(obj1==obj2);//true
System.out.println(obj2==obj1);//true
}Object有哪些公用方法
Object是说有类的父类,任何类都默认集成Object
clone保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则跑出CloneNotSupportedException异常。
equals在Object中与==是一样的,子类一般需要重写该方法。
hashCode该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
getClass final方法,或偶的运行时类型。
wait使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断,wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
1、其他线程调用了该对象的notify。
2、其他线程调用了该对象的notifyAll方法。
3、其他线程调用了interrupt中断该线程。
4、时间间隔到了。
5、此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
notif唤醒在该对象上等待的某个线程。
notifyAll唤醒在该对象上等待的所有线程。
toString转换成字符串,一般子类都有重写,否则打印句柄。
Java的四种引用,强弱软虚,用到的场景
从JDS1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用,软引用,弱引用和虚引用。
1、强引用
最普遍的一种引用方式,如String s = “abc”,变量s就是字符串“abc”的强引用,只要强引用存在,则垃圾回收器就不会回收这个对象。
2、软引用(SoftReference)
用于描述还有用但非必须的对象,如果内存足够,不回收,如果内存不足,则回收。一般用于实现内存敏感的高速缓存,软引用可以和引用队列ReferenceQueue联合使用,如果软引用的对象被垃圾回收,JVM就会把这个软引用加入到与之关联的引用队列中。
3、弱引用(WeakReference)
弱引用与软引用大致相同,弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
4、虚引用(PhantomReference)
就是形同虚设,与其他集中引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么他就和没有任何引用一样,在人生时候都可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收器回收的活动。
虚引用与软引用和弱引用的一个区别在于:
虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引加入到与之关联的引用队列中。
















