目录
1.JRE、JDK和JVM的关系
2.JAVA语言的特点
3.JAVA和C++的区别
4.JAVA的数据类型
5.自动装箱与拆箱
JDK(java development kit):Java开发工具包,是整个java的核心,包括JRE,JAVA工具和Java基础类库
JRE(java runtime envirment):Java运行环境,包括JVM及Java核心类库
JVM(java virtual machine):Java虚拟机,是整个Java实现跨平台的核心
总结 JDK是java的开发工具,JRE是java的运行环境,JVM是java虚拟机
JDK包含JRE,JRE包含JVM
开源,简单,高效
面向对象
平台无关性,通过JVM实现,一次编译,到处运行
支持网络编程
多线程
动态的内存管理机制
安全性
首先,JAVA和C++都是面向对象的语言,主要有以下区别
1.JAVA通过虚拟机实现跨平台特性,而C++依赖于特定的平台
2.JAVA没有指针,它的引用可以看作是安全指针,而C++有着和C一样的指针
3.JAVA支持自动垃圾回收,而C++需要手动回收
4.JAVA不支持多重继承,只能通过实现多个接口来实现该目的,而C++支持多继承
5.JAVA不支持操作符重载,而C++支持
6.JAVA的goto是保留字,不可使用,但C++可以
整数类型
Java语言的整型常量默认为int型,声明long型常量时后加‘ l ’或‘ L ’ 。
浮点类型
Java 浮点型常量默认为 double 型,声明一个常量为 float 型时在数字后面加’ f ‘ 或’ F ‘。
布尔类型适于逻辑运算,一般用于程序流程控制 。JAVA中布尔型变量只能取值true和false,不可 以0或非 0 的整数替代false和true。
字符类型
char型数据表示单个字符,占2个字节,使用时字符需要用单引号括起来。其默认值为'\u0000'
装箱:将基本数据类型用包装类型包装起来
拆箱:将包装器类型转换为基本类型
输出结果为: true
false
下面解释一下原因:可以查看源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
//如果i满足条件,直接返回,否则创建一个新对象
return new Integer(i);
}
private static class IntegerCache {
static final int low = -128;
//下限为-128
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
//上限为127
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
个人理解为:在创建Integer对象时,如果数值范围在-128到127之间,则返回IntegerCache 已经存在的对象引用,否则创建一个新的对象
Integer,Short,Character,Long这几个类的valueOf()类似
再看Double类的源码
public static Double valueOf(double d) {
return new Double(d);
}
每次创建对象都是创建一个新的对象,Float同
输出结果为: true
true
true
false
true
true
false
false
下面解释一下原因:
1.==号两边都是引用类型时,比较的是是否指向同一个对象,都是基本数据类型时,比较的是数值,一边是基本数据类型,一边是引用数据类型时,会触发自动拆箱,即比较数值
2.equals()方法会先触发自动拆箱,再触发自动装箱,即先比较数值,再比较是否指向同一个对象
3.integer3是一个对象,a是一个常量,二者存放内存的位置不同,所以不相等