9、访问修饰符,private protected public以及不写的区别
(1)private:同一类内可见。可以修饰对象:变量,方法
(2)default:即默认,同一包内可见,可以修饰对象:变量、方法、接口、类
(3)protected:对同一包内的类和子类可见,,修饰对象:变量、方法不能修饰类
(4)public:所有类可见,修饰对象:类、接口、变量、方法
**跨平台性:**因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台。
8、int和Integer有什么区别
(1)为了编程方便,java有8种基本数据类型。又为了能将这8种基本数据类型当做对象处理,又为每个基本数据类型引入了对应的包装类型。JDK1.5之后,引入了自动拆箱机制,基本数据类型可以和包装数据类型互换。
(2)Ingeter是int的包装类,必须实例化才能使用。Integer变量实际上是对象的引用,指向对象,默认值为null。
(3)int是基本数据类型,不必实例化就可以使用,他直接存数据,默认是0.
(4)Integer和int比较时,只要两个变量的值相等,就是true,因为自动装箱拆箱。
(5)非new生成的Integer变量和new生成的integer变量比较为false。
(6)两个非new生成的integer变量,只要范围在[-128,127]之间就为true。
缓存池
new Integer(123) 与 Integer.valueOf(123) 的区别在于:
- new Integer(123):每次都会新建一个对象
- Integer.valueOf(123):会使用缓存池中的对象,多次调用取得同一个对象的引用
Integer x = 100; //自动装箱,底层调用 Integer.valueOf(1)
Integer y = 100;
System.out.println(x == y); // true
Integer x = 1000;
Integer y = 1000;
System.out.println(x == y); // false,因为缓存池最大127
int x = 1000;
Integer y = 1000;
System.out.println(x == y); // true,因为 y 会调用 intValue 自动拆箱返回 int 原始值进行比较