Java数据类型和类型转换

Java的数据类型分为基本数据类型和引用数据类型数组

  

 

Java 程序在运行时,须要在内存中的分配空间。为了提升运算效率,就对空间进行了不一样区域的划分,由于每一片区域都有特定的处理数据方式和内存管理方式。数据结构

   

   
        栈(stack):在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有    的说是1M,总之是一个编译时就肯定的常数),若是申请的空间超过栈的剩余空间时,将提示overflow。所以,能从栈得到的空间较小。  
        
        堆(heep): 堆内存用来存放由new建立的对象和数组,堆是向高地址扩展的数据结构,是不连续的内存区域。这是因为系统是用链表来存储的空闲内存地址的,天然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。因而可知,堆得到的空间比较灵活,也比较大。  函数

 

   方法区:用于存放类的信息。spa

 

   本地方法栈:给C/C++的native原生底层方法给予支持。指针

 

   PC寄存器:给CPU用。code

 

堆与栈之间的联系:对象

  当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的做用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间能够当即被另做他用。在堆中产生了一个数组或对象后,还能够在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就至关因而为数组或对象起的一个名称,之后就能够在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其做用域以外后被释放。而数组和对象自己在堆中分配, 即便程序运行到使用 new 产生数组或者对象的语句所在的代码块以外,数组和对象自己占据的内存不会被释放, 数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放, 在随后的一个不肯定的时间被垃圾回收器收走(释放掉)。

     栈中的变量指向堆内存中的变量,这就是 Java 中的指针!blog

 

数据类型的转换内存

  数据类型的转换分为隐式类型转换和显示类型转换,区别在于范围大小(如int的范围-2^16~2^16-1,注意这里比较的并非所占字节)的转换方向,也就是向上转型和向下转型。作用域

  隐式类型转换便是向上转型,属于自动转换,表示范围小的向范围大的数据类型进行转换,如:

                int a=50;
             long b=a;            

 

  显示类型转换便是向下转型,属于强制转换,表示范围大的向范围小的数据类型进行转换,如:

         long a=50;
            int b=(int) a;
相关文章
相关标签/搜索