博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本类型和引用类型
阅读量:3949 次
发布时间:2019-05-24

本文共 3015 字,大约阅读时间需要 10 分钟。

原文链接:https://blog.csdn.net/qq_31071255/article/details/82192075

Java 基本数据类型与引用类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
Java中有两大类型

  1. 内置数据类型(基本数据类型)
  2. 引用数据类型

内置数据类型(基本数据类型)

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:

  1. byte 数据类型是8位、有符号的,以二进制补码表示的整数;
  2. 最小值是 -128(-2^7),也就是一个字节;
  3. 最大值是 127(2^7-1);
  4. 默认值是 0;
  5. byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
  6. 例子:byte a = 100,byte b = -50。

short:

  1. short 数据类型是 16 位、有符号的以二进制补码表示的整数
  2. 最小值是 -32768(-2^15);
  3. 最大值是 32767(2^15 - 1);
  4. Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
  5. 默认值是 0
  6. 例子:short s = 1000,short r = -20000。

int:

  1. int 数据类型是32位、有符号的以二进制补码表示的整数;
  2. 最小值是 -2,147,483,648(-2^31);
  3. 最大值是 2,147,483,647(2^31 - 1);
  4. 一般地整型变量默认为 int 类型;
  5. 默认值是 0 ;
  6. 例子:int a = 100000, int b = -200000。

long:

  1. long 数据类型是 64 位、有符号的以二进制补码表示的整数;
  2. 最小值是 -9,223,372,036,854,775,808(-2^63);
  3. 最大值是 9,223,372,036,854,775,807(2^63 -1);
  4. 这种类型主要使用在需要比较大整数的系统上;
  5. 默认值是 0L;
  6. 例子: long a = 100000L,Long b = -200000L。

float:

  1. float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  2. float 在储存大型浮点数组的时候可节省内存空间;
  3. 默认值是 0.0f;
  4. 浮点数不能用来表示精确的值,如货币;
  5. 例子:float f1 = 234.5f。

double:

  1. double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
  2. 浮点数的默认类型为double类型;
  3. double类型同样不能表示精确的值,如货币;
  4. 默认值是 0.0d;
  5. 例子:double d1 = 123.4。

boolean:

  1. boolean数据类型表示一位的信息;
  2. 只有两个取值:true 和 false;
  3. 这种类型只作为一种标志来记录 true/false 情况;
  4. 默认值是 false;
  5. 例子:boolean one = true。

char:

  1. char类型是一个单一的 16 位 Unicode 字符;
  2. 最小值是 \u0000(即为0);
  3. 最大值是 \uffff(即为65,535);
  4. char 数据类型可以储存任何字符;
  5. 例子:char letter = ‘A’;。

包装类:

Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

byte->Byte
short->Short;
int->Integer;
long->Long;
double->Double;
float->Float;
char->Charecter;
boolean->Boolean;
如果要查看基本类型的范围大小,可用包装类里的Max_Value Min_Value函数获得其边缘值,例如:System.out.println(Byte.Max_value);

补充:包装类的自动拆箱和装箱,首先解释一下概念,自动拆箱就是把包装类型自动拆为基本类型,自动装箱就是把基本类型自动包装为包装类型,例如:

1.Integer integer=10;
2.int j=integer;
前者就是自动装箱,后者就是自动拆箱。本质上Integer integer=99;java虚拟机编译之后,系统执行的是Integer integer=Integer.valueOf(99);
int j=integer;
系统为我们执行的代码是:
int j=integer.valueOf();
这里重点强调一下Integer.valueOf(i),这个函数,当i值在-128~127之间时,不会创建新的对象,但当i值超出这个范围就会新建一个对像,可以用这个来判断,例如,
Integer i1=100;
Integer i2=100;
Integer i3=200;
Integer i4=200;
输出i1
i2;i3i4;可知,前者为true,后者为false。接下来再测试一下,当
Integer i1=300;
int i2=300;
输出i1
i2;时,结果为true,这是因为,Integer会自动拆箱为int类型,而基本类型比较内容

引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。

引用类型包括类、接口、数组,装箱值类型
例子:
String a=new String(“adfaf”);
Collection b=new ArrayList();
String[] c=new String[]{};
Integer d=new Integer(46);
这些都为引用类型。

最最重点:引用类型与基本数据类型在内存空间的分配;

首先介绍一下java内存中有哪些空间:可以粗浅的分为栈空间,堆空间,和方法区,

栈区:

1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

堆区:

1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

方法区:

1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

现在我们知道了,基本数据类型就是在栈中保存,而引用类型变量在栈中,指向的对象在堆中,所以当用==比较两个变量时,一定要看清楚它是什么数据类型。点赞!!!!点赞!!!!!加关注更好哦!!

你可能感兴趣的文章
浪里个浪 FZU - 2261 (多源最短路问题)
查看>>
D - Sorting It All Out POJ - 1094 (拓扑排序)
查看>>
Reward HDU - 2647 (拓扑排序)
查看>>
Divide by three, multiply by two CodeForces - 977D (拓扑排序)
查看>>
Big Event in HDU HDU - 1171 (多重背包)
查看>>
最长子序列长度 (动态规划 O(N^2))
查看>>
最长子序列长度 (贪心+二分 O( Nlog(N) ))
查看>>
数塔 HDU - 2084 (简单的dp)
查看>>
超级楼梯 HDU - 2041 ( 简单的dp )
查看>>
Piggy-Bank HDU - 1114 ( 完全背包 )
查看>>
Knapsack problem FZU - 2214 ( 01背包 )
查看>>
Bone Collector HDU - 2602 ( 01背包 )
查看>>
背包问题 V2 51Nod - 1806 ( 多重背包 )
查看>>
最少拦截系统 HDU - 1257 ( 动态规划 )
查看>>
瞌睡 (网易笔试题)
查看>>
分苹果 (网易笔试题)
查看>>
已知前序遍历和中序遍历求二叉树
查看>>
已知后序遍历和中序遍历求二叉树
查看>>
使用最小花费爬楼梯 (LeetCode - 746)
查看>>
勾股数 (迅雷笔试题)
查看>>