Java基础数据类型和引用类型的区别
时间:2022-07-22
本文章向大家介绍Java基础数据类型和引用类型的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、数据类型
Java中的数据类型分为两大类,基本数据类型和引用数据类型。
1、基本数据类型
基本数据类型只有8种,可按照如下分类 ①整数类型:long、int、short、byte ②浮点类型:float、double ③字符类型:char ④布尔类型:boolean
No. |
数据类型 |
大小/位 |
可表示数据范围 |
默认值 |
---|---|---|---|---|
1 |
byte(字节型) |
8 |
-128~127 |
0 |
2 |
short(短整型) |
16 |
-32768~32767 |
0 |
3 |
int(整型) |
32 |
-2147483648~2147483647 |
0 |
4 |
long(长整型) |
64 |
-9223372036854775808~9223372036854775807 |
0 |
5 |
float(单精度) |
32 |
-3.4E38~3.4E38 |
0.0 |
6 |
double(双精度) |
64 |
-1.7E308~1.7E308 |
0.0 |
7 |
char(字符) |
16 |
0~255 |
'u0000' |
8 |
boolean(布尔) |
- |
true或false |
false |
2、引用数据类型
引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String 类型就是引用类型。简单来说,所有的非基本数据类型都是引用数据类型。
二、基本数据类型和引用数据类型的区别
1、存储位置
基本变量类型
- 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用变量类型
- 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
ps:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般
public class Main{
public static void main(String[] args){
//基本数据类型
int i=1;
double d=1.2;
//引用数据类型
String str="helloworld";
}
}
2、传递方式
基本变量类型
- 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的 //基本数据类型作为方法参数被调用 public class Main{ public static void main(String[] args){ int msg = 100; System.out.println("调用方法前msg的值:n"+ msg); //100 fun(msg); System.out.println("调用方法后msg的值:n"+ msg); //100 } public static void fun(int temp){ temp = 0; } } 引用变量类型
- 引用数据类型变量,调用方法时作为参数是按引用传递的
//引用数据类型作为方法参数被调用
class Book{
String name;
double price;
public Book(String name,double price){
this.name = name;
this.price = price;
}
public void getInfo(){
System.out.println("图书名称:"+ name + ",价格:" + price);
}
public void setPrice(double price){
this.price = price;
}
}
public class Main{
public static void main(String[] args){
Book book = new Book("Java开发指南",66.6);
book.getInfo(); //图书名称:Java开发指南,价格:66.6
fun(book);
book.getInfo(); //图书名称:Java开发指南,价格:99.9
}
public static void fun(Book temp){
temp.setPrice(99.9);
}
}
调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉
有不对的地方请指正
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Shader基础技巧整理
- 隐秘的物理粒子系统与渲染 !Cocos Creator LiquidFun !
- 一起用Gradle Transform API + ASM完成代码织入呀~
- 掩盖浏览痕迹不会被发现的方法【逗】
- webpack实战——样式预处理
- 前端防止浏览器访问旧版 js 和 css 的优化思路
- 少数派实测报告:AI巨无霸模型GPT-3 | 附送API 调用方法「AI核心算法」
- Qt音视频开发19-海康sdk录像存储
- 单元测试在深度学习中的应用 | 附代码「AI产品/工程落地」
- 实现 AOP 的三种方式
- Spring Boot 配置
- 彻底弄懂TCP协议:从三次握手说起
- 各大厂都在考的 Java 集合知识点总结,不来看看???
- NoSQL 这么火,快来看看这份 Redis 简介
- Ubuntu16.04安装QQ机器人