一、基本数据类型

  • byte、short、int、long(整数类型)
  • float、double(浮点数类型)
  • char(字符型)
  • boolean(布尔类型 )

Java数据大多数存放在堆栈中。

  • 栈区:存放局部变量,对象声明的引用等。

  • 堆区:存放new关键字创建的类(包含成员变量)和数组等。

堆与栈的优缺点

  • 栈的优点:栈数据可以共享,存取速度比堆。   缺点是:存在栈中数据大小与生命周期是确定的。

  • 堆的优点:可以动态分配内存大小,生存期也不必事先告诉编译器。缺点是:存取速度较

举个栗子,如下图:

  • 编译器会在栈中创建一个a的引用,然后在栈中查找字面值为5的引用,将a指向5的地址,若没有找到,就会开辟一个地址来

    存放字面值5,然后再将a指向该地址。定义int c=5;因为栈中存在字面值5,所有c会直接指向5的地址。令a=8,因为栈中

    没有字面值为8的引用,所有会开辟一个地址存放8,a会重新指向8的地址,c的指向不受a影响,c的值不会改变。

二、引用数据类型

1. Class(类)

2. Interface(接口)

3. Array(数组)

  • Java是面向对象语言,它为每一个基本数据类型都做了相应的包装类(见上一个表格),也就是实现了基本类型变量到包装类

    对象的转换。引用类型一般通过new关键字来创建,(对象)它存放在内存的中,可以在运行时动态的分配内存大小。引用

    变量中存放的是变量内容的地址,它存放在内存的中。当引用类型变量不被使用时,Java内部的垃圾回收器GC会自动回收

1.代码示例-Class:

public class Demo {
String Name;
int Age;
double Score;
Demo(String Name,int Age,double Score){
//定义带三个参数的构造函数,进行初始化
this.Name=Name;
this.Age=Age;
this.Score=Score;
};
public static void main(String[] args) {
Demo d1=new Demo("小吴",20,98);
Demo d2=new Demo("小天",19,80);
}
}

  • 引用本身是保留在中的,而引用所指的对象是存放在中的。

2.代码示例-Interface

interface Animal {//定义Animal接口
public void eat();
public void speak();
}
public class Dog implements Animal {//Dog类实现Animal接口
public void eat() {
System.out.println("我喜欢吃骨头!");
}
public void speak() {
System.out.println("汪汪汪!");
}
public static void main(String[] args) {
Dog d=new Dog();
d.eat();
d.speak();
}
}
  • 编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

  • 接口与类的区别:

  1. 接口不能用于实例化对象。

  2. 接口没有构造方法。

  3. 接口中所有的方法必须是抽象方法。

  4. 接口不能包含成员变量,除了 static 和 final 变量。

  5. 接口需要被类实现。

  6. 接口支持多继承。

3.代码示例-Array

public class Array {
public static void main(String[] args) {
int[] myList = new int[] {5,2,0,1,3,1,4};
for(int list: myList) {
System.out.print(list);
}
}
}
  • 在以上代码中,myList变量存放了数组对象的引用,它存放到栈中,而数组对象所占的空间在堆上被分配(和上图一样)。

拓展1:

  • 方法的返回值类型为类名:返回该类的对象。

  • 方法的返回值类型为接口名:返回该接口的实现类的对象。

 public static Comparable findMax(Comparable[] arr) {
int maxIndex=0;
for(int i=1;i<arr.length;i++)
if(arr[i].compareTo(arr[maxIndex])>0)
maxIndex=i;
return arr[maxIndex];
}
  • 上述代码中,传递参数为实现了Comparable接口的对象数组,方法返回的是Comparable接口的实现类的对象。

  • 我们通常会使用Object、接口类型等方式来表示泛型,目的是支持代码重用。

拓展2:自动装箱与拆箱

  • 自动装箱:如果一个int型量被传递到需要一个Integer对象的地方,编译器将在幕后插入一个对Integer构造方法的调用。

  • 自动装箱:如果一个Integer对象被放到需要int型量的地方,则编译器将在幕后插入一个对intValue方法的调用。

注:参考《数据结构与算法分析Java语言描述》和 菜鸟教程

Java中的基本数据类型与引用数据类型的更多相关文章

  1. JAVA中分为基本数据类型及引用数据类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  2. java中的基本数据类型和引用数据类型

    java中基本数据类型有8种:byte,short,int,long,char,float,double,boolean 整型有四种:byte short,int,long byte:   1字节   ...

  3. Java中的基本数据类型和引用数据类型的区别

    一.数据类型 Java中的数据类型分为两大类,基本数据类型和引用数据类型. 1.基本数据类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:fl ...

  4. Java基础之路(一)下--引用数据类型之数组

    上次我们说了java的基础数据类型,今天我们就来说一下引用数据类型中的数组. 什么是数组 数组:存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合. 数组中的每一个数据称之为数组元素,数 ...

  5. java的数据类型:基本数据类型和引用数据类型

    Java数据类型的基本概念 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式. 开始接触每种语言的时候,都会存在对数据类型的认识,有复杂的,有复杂的,各 ...

  6. java里的基本数据类型和引用数据类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  7. Java学习之基本数据类型和引用数据类型区别

    JAVA中分为基本数据类型和引用数据类型区别一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存 ...

  8. Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)

    java中的方法可以传递参数,参数的传递方法就是值传递. 参数有形参和实参,定义方法时写的参数叫形参,真正调用方法时,传递的参数叫实参. 调用方法时,会把实参传递给形参,方法内部其实是在使用形参. 所 ...

  9. JavaScript中基本数据类型和引用数据类型的区别

    1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...

  10. js中基本数据类型和引用数据类型的区别

    1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...

随机推荐

  1. Spring Data JPA 的 Specifications动态查询

    主要的结构: 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询. ...

  2. Numpy的学习2-基础转换

    import numpy as np A = np.arange(2, 14).reshape((3, 4)) # array([[ 2, 3, 4, 5] # [ 6, 7, 8, 9] # [10 ...

  3. MyBatis 与 Spring 的完美整合方法

    MyBaits 整合 Spring MyBatis-Spring 项目 第一步:创建测试工程 第二步:引入依赖 jar 包 第三步:编写 Spring 配置文件 第四步:编写 MyBatis 配置文件 ...

  4. rest framework Serializer fields

    串行领域 在表单类中的每个字段不仅负责验证数据,同时也为"清洁" - 它以标准化格式一致. - Django文档 串行字段手柄的原始值和内部数据类型之间的转换.他们还应对验证输入值 ...

  5. Mongodb分布式集群副本集+分片

    目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...

  6. Visual Studio 2013中安装Resharper之后一些快捷键无法使用,比如F6和F12

    快捷键是一个很好用的东西,尤其对于计算机从业者来说,好的快捷键能够高程度提高工作效率.像我们程序员经常需要团队开发,我们会遇到一个问题,那就是快捷键不一致问题,我一般会安装resharper,但是有的 ...

  7. 点名小辣辣,带你入门 JMeter (。・∀・)ノ゙

    什么是 JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域. 它可以用于测试静态 ...

  8. @RequestBody,@RequestParam请求数据接收数据

    一. @RequestBody 注解 @RequestBody是用于解析body中的json内容,对于我们使用时候我们需要指定Content-Type参数为application/json,标识我们需 ...

  9. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  10. 分析http协议和高并发网站架构

    案例任务名称 分析http协议和高并发网站架构 案例训练目标 深入理解http协议的工作原理 掌握http协议的分析方法 包含技能点 搭建web服务器 编辑简单的html页面并上传到服务器 使用wir ...