关于java问题的一些问题

学习一门语言基础是非常重要的因此本文总结了一些常见的基础问题的解答,希望可以帮到大家

1. 九种基本数据类型的大小,以及他们的封装类

上面有两个比较值得紸意的地方:

一个是boolean的大小并非是确定的,根据网上找来的JVM规范:

从上文我们可以得知boolean变量单独声明的时候被当做int变量处理,其大小为32bit当boolean变量声明数组的时候,每个boolean当做byte变量处理大小为8bit。

另一个是void也是java问题的基本类型之一其对应的包装类是不可实例化的,如下所示:

在java问题中switch后面的括号里放的参数类型只能是int类型,虽然说放入charbyte,short类型也不会报错但其实是因为char,byte和short类型可以自己转化(宽化)为int類型实际上最后操作的还是int类型。

原理:在java问题的9种基本类型中boolean和void类型不能进行转换。大小较小的类型向大小较大的类型转换叫宽化(如char转int)宽化会自动在变量前面补零且是安全的,因此可以自动转换大小较大的类型向大小较小的类型转化叫窄化(如double转int),窄化不能自动转换必须使用强制类型转换,如:(int)double

补充:除了int类型外还支持枚举类型。另外在jdk1.7中有了新的特性支持String类型。

很经典的一个問题了首先==在java问题中,对于基本类型比较的是他们的值是否相等对于引用类型则比较两个对象是否地址相同,是否为同一引用equals在Object中嘚默认实现和==没有区别:

值的注意的是用的较多的String类重写了equals方法:

从上面方法我们可以看出,首先String比较传入的Object对象是否和当前String为同一引用是则返回true。如果不是则判断传入的Object对象是否String对象及其子类实例,如果不是则返回false再然后如果传入的参数是String的实例,则比较两个String的内嫆是否完全相同

Object中的public方法如图所示,简单介绍下每个方法:

  1. Object()默认构造函数,略
  2. toString()返回一个代表该对象的字符串,此处返回:“类名@16进淛哈希码”
  3. notify()native和final方法,唤醒在此对象监视器上等待的单个线程
  4. wait()该方法有3个重载,作用是让当前线程处于等待状态直到其他线程调用此對象的 notify() 方法或 notifyAll() 方法,或超过指定时间或其他线程中断当前线程。

5. java问题的四种引用强弱软虚,用到的场景

在java问题中对象的引用和JVM的GC有著密切的联系,对于对象我们有4中不同的引用:

    1. 强引用:我们平时普通创建对象的方法就是强引用普通系统99%以上都是强引用。如果一个對象是强引用创建的则需要手动置null,JVM的GC才能回收其内存否则即使是报内存不足,也不会清理具有强引用的对象
    2. 软引用:通过SoftReference<T>方法创建为软引用,一般JVM的GC不会清理软引用但会在发生OOM(out of memory)时清理软引用。一般软引用可以用来实现内存敏感的高速缓存
    3. 弱引用:通过WeakReference<T>方法創建即弱引用,弱引用的生命周期比软引用短很多如果一个对象只具有弱引用,那么他会在JVM GC时被清理掉JDK有使用弱引用实现的WeakHashMap,他会在GC時回收掉不怎么使用的键值对
    4. 虚引用:通过PhantomReference<T>方法创建即为虚引用,虚引用形同虚设如果一个对象只具有虚引用,那么它就和没有任何引用一样随时会被JVM当作垃圾进行回收。虚引用主要用来跟踪对象被垃圾回收的活动
}

       要想让一个问题变难最基本有兩种方式,即极度细化和高度抽象对于任何语言的研究,良好的基础至关重要本篇文章,将从极度细化的角度

来解析一些java问题中的基礎问题这些问题也是大部分编程人员的软肋或易混淆点。

特别注意:本站所有转载文章言论不代表本站观点本站所提供的摄影照片,插画设计作品,如需使用请与原作者联系,版权归原作者所有

}

我要回帖

更多关于 java问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信