• 表格显示
  • 引用数据类型
  • 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)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引加入到与之关联的引用队列中。