什么是java自动拆装箱 什么是java中的自动装箱和自动拆箱
大家好,关于什么是java自动拆装箱很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于什么是java中的自动装箱和自动拆箱的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
什么是java中的自动装箱和自动拆箱
java自动装箱和拆箱
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。
装箱:将基本类型转换成包装类对象
int i=10;
Integer x=new Integer(i);手动装箱
Integer y=10;自动装箱
拆箱:将包装类对象转换成基本类型的值
Integer j=new Integer(8);
int m=j.intValue();//手动拆箱
int n=j;//自动拆箱
java为什么要引入自动装箱和拆箱的功能?又是怎么实现的呢?
主要是用于java集合中,List<Inteter> list=new ArrayList<Integer>();
list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。
实现原理:javac编译器的语法糖
public class Main{
public static void main(String[] args){
Integer i1= 100;
Integer i2= 100;
Integer i3= 200;
Integer i4= 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果为:true false
在通过Integer.valueOf()方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用(位于堆对象池中);否则创建一个新的Integer对象(创建在java堆中)。上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一个对象,而i3和i4则是分别指向不同的对象。
public class Main{
public static void main(String[] args){
Double i1= 100.0;
Double i2= 100.0;
Double i3= 200.0;
Double i4= 200.0;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果为:false false
为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现呢?很简单:在某个范围内的整型数值的个数是有限的,而浮点数却不是。
public class Main{
public static void main(String[] args){
Boolean i1= false;
Boolean i2= false;
Boolean i3= true;
Boolean i4= true;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果为:true true
至于为什么是这个结果,同样地,看了Boolean类的源码也会一目了然。下面是Boolean的valueOf方法的具体实现:
public static Boolean valueOf(boolean b){
return(b? TRUE: FALSE);
}
public class H{
public static void main(String[] args){
Integer m=10;
int n=10;
System.out.println(m==n);
}
}
//结果为:true
java基础面试题有哪些
下面是10道java基础面试题,后附答案
1.什么是 Java虚拟机?为什么 Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行 Java字节码的虚拟机进程。Java源文件被编译成能被 Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.“static”关键字是什么意思?Java中是否可以覆盖(override)一个 private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中 static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
3.JDK和 JRE的区别是什么?
Java运行时环境(JRE)是将要执行 Java程序的 Java虚拟机。它同时也包含了执行 applet需要的浏览器插件。Java开发工具包(JDK)是完整的 Java软件开发包,包含了 JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行 Java应用程序。
4.是否可以在 static环境中访问非 static变量?
static变量在 Java中是属于类的,它在所有的实例中的值是一样的。当类被 Java虚拟机载入的时候,会对 static变量进行初始化。如果你的代码尝试不用实例来访问非 static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的 8中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是 Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把 int转化成 Integer,double转化成 double,等等。反之就是自动拆箱。
6.Java支持多继承么?
不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。
7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java不支持像 C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
9.接口和抽象类的区别是什么?
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是 final的。抽象类可以包含非 final的变量。
Java接口中的成员函数默认是 public的。抽象类的成员函数可以是 private, protected或者是 public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 main方法的话是可以被调用的。
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
最后祝你面试顺利!
Java支持的数据类型有哪些什么是自动拆装箱
java支持的数据类型有两大类:一类是基本数据类型分为8种(数据) byte——(单字节) sort——(双字节) int——(4字节) long——(8字节) float——(4字节) double——(8字节) char——(双字节) boolean——(双字节)前面四种为整数类型,5和6为浮点数类型,7为字符类型,8为布尔类型。一类是引用类型3种(除了数据还有地址编号) Object——(类类型) Array——(数组类型) Interface——(接口类型) JVM在解释java变量的时候是把它们按照数据类型区分的,基本数据类型的变量会存储在栈空间中,而引用类型在栈空间存放的是地址编号,它们的数据是存储在堆空间中的。查找引用类型变量的时候现在栈空间拿到该变量在堆空间存储数据的地址编号,然后再到堆空间按照拿到的地址编号取数据。
一、Java简介
Java是一种面向对象的编程语言。Java语言有两个特点:功能强大和使用方便。Java具有简单的、面向对象的和分布式的特点。它可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。
二、java的工作原理
在编辑和运行一个Java程序时,这四个方面需要同时涉及:(1)Java编程语言;(2)Java类文件格式;(3)Java虚拟机;(4)Java应用程序接口。使用文本编辑软件(如写字板、记事本、UltraEdit等)或集成开发环境(MyEclipse、Eclipse等)。在Java源文件中定义不同的类,通过调用类中的方法访问资源系统(这些类实现Java API),编译源文件生成二进制中间代码,并存储在类文件中。然后通过运行操作系统平台环境对应的Java虚拟机运行类文件,执行编译生成的字节码,调用类文件中实现的方法,满足程序的Java API调用。
三、Java的贡献及影响力
Java语言是一种与时俱进的计算机语言程序。它深刻地展现了编程的本质,其简洁严谨的结构和简洁的语法为其未来的开发和维护提供了保障。因为它提供了网络应用和多媒体访问的支持,所以它将促进互联网和企业网络的应用。此外,为了保持Java的增长,促进Java社区的参与,Sun在Java One开发者大会上宣布开放Java核心源代码,鼓励更多人参与Java社区活动。在Java社区和IBM等全球技术合作伙伴的支持下,Java技术继续在创新和社会进步中发挥着强大而重要的作用,并且随着其编程难度的降低,更多的专业人士专注于Java语言的编写和框架结构的设计。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!