java数据类型的种类以及存放的位置

java 数据类型分为基础数据类型、引用数据类型两大类。

其中基础数据类型包括8种:byte、short、int、long、float、double、char、boolean

引用数据类型包括3种:对象(class)、接口(interface)、array(数组)

图解:

java数据类型图:                                             ┏数值型━┳━整数型:byte short int long              ┏基本数据类型━━┫              ┗━浮点型:float double              ┃                            ┣字符型:char                                          数据类型╋                            ┗布尔型:boolean                            ┃                            ┏类(class)              ┗引用数据类型━━╋接口(interface)                                             ┗数组(array)

 

  存放位置的不同:

栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和 multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:int a = 3;int b = 3;编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。String是一个特殊的包装类数据。可以用:String str = new String("abc");String str = "abc";两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。而第二种是先在栈中创建一个对 String类对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。String str1 = "abc";String str2 = "abc";System.out.println(str1==str2); //true可以看出str1和str2是指向同一个对象的。String str1 =new String ("abc");String str2 =new String ("abc");System.out.println(str1==str2); // false用new的方式是生成不同的对象。每一次生成一个。因此用第二种方式创建多个”abc”字符串,在内存中其实只存在一个对象而已. 这种写法有利与节省内存空间. 同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。另一方面, 要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的对象。只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

两者的区别:


一、从概念方面来说


基本数据类型:变量名指向具体的数值
引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值


二、从内存构建方面来说


基本数据类型:变量在声明之后java就会立刻分配给他内存空间


引用数据类型:这类变量声明时不会分配内存,只是存储了一个内存地址。


三、从使用方面来说


基本数据类型:使用时需要赋具体值,判断时使用“==”号


引用数据类型:使用时可以赋null,判断时使用equals方法

 
时间: 2024-11-08 22:14:30

java数据类型的种类以及存放的位置的相关文章

JDBC数据类型、Java数据类型、标准sql类型

本文转自:http://www.cnblogs.com/shishm/archive/2012/01/30/2332142.html 谢谢原作者细心的总结,很赞! 本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft 目前正在准备这本书.这本书是一本教程,同时也是 JDBC 的重要参考手册,它将作为 Java 系列的组成部份,在 1997 年春季由 Addis

java锁的种类以及辨析(转载)

java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及.本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑. 1.自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区.如下 01 public class SpinLock { 02  

Java数据类型(二)、Java运算符、流程控制

一.程序写作(创建对象的初始化过程) 1.目的/结果:输出一段话"..." 2.步骤: (1)创建一个基础类,main: (2)创建一块内存空间,用来存储这段话 ①先定义属性,name,sex,age等: ②再定义方法,需要重新创建新的class类,但不需要新的ma方法: (3)调用系统方法/库方法println,实现输出结果 ①在原有的类中创建新对象,将新的class类中的方法调用过来: ②运行,输出所有的内容. //---------------------------------

Java数据类型总结

Java数据类型总结 java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. 1.整数:包括int,short,byte,long 2.浮点型:float,double 3.字符:char 4.布尔:boolean 基本型别 大小 最小值 最大值 boolean ----- ----- ------ char 16-bit Unicode 0 Unicode 2^16-1 byte 8-bit -128 +127 short 16-bit -2^1

JS与JAVA数据类型的区别

JavaScript与Java数据类型的区别 阅读目录 Number String Boolean Null Undefined Object 今天开始正式认真学习js,虽然在平常j2ee开发中也经常用到JS但并不精通,这次随笔记下js与Java数据类型的不同之处 回到顶部 Number 与java不同,js作为弱类型语言即使在浮点数与整数上也未作明确区分,Number值可以是var a = 5 or  5.5,以及其他进制如八进制 var a  = 070.甚至是科学计数 var a = 3.

Java 数据类型和运算符

                                                  Java   数据类型和运算符 Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法.逻辑

简单的java数据类型总结

java数据类型 基本数据类型(一般使用小写) 特点 除了值没有任何标识,1=1 不可变数据类型 在作用域范围内,局部栈中存储 建立成本低 对象数据类型(除了基本数据类型以外的数据类型) 特点 除了值以外还有标识 部分可变 堆中存储,自动回收 泛型进行统一的表示 建立成本高 祖先:均为object的子类(缺省则其父类为object) 基本数据类型的包装类 将基本数据类型封装成为对象,从而进行操作 尽可能少用,效用较低 java会自动进行转换,将基本数据类型转化成基本数据类型 运算符 "+&quo

java数据类型总结与数据类型转换问题

(1)数据类型总结 java数据类型主要有Boolean.byte.int.short.char.long.float.double. byte类型数据占1个字节,8位,最高位表示符号,则表示范围是:-2^7~2^7-1 int类型数据占4个字节,共32位,最高位表示符号,则表示范围是:-2^31~2^31-1 short类型数据占2个字节,共16位,最高位表示符号,则表示范围是:-2^15~2^15-1 long类型数据占8个字节,共64位,最高位表示符号,则范围是:-2^63~2^63-1

Java数据类型和方法参数

目录 [tpc] Java数据类型 Java变量类型可以分为两种,一种是存储在堆栈中的基本数据类型,一种是存储在堆里的Java对象. 基本数据类型有9种,4种整型,2种浮点型,1种Unicode字符型,1种布尔类型,1种void类型. void类型用于方法返回值,表示没有返回值. 基本类型 大小(字节) 包装器类型 byte 1 Byte short 2 Short int 4 Integer long 8 Long float 4 Float double 8 Double char 2 Ch