首先要明白为什么需要数据类型?
数据类型在计算机语言中,是对内存位置的一个抽象的表达方式。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。所以给变量赋值前需要先确定变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式
JAVA是强类型语言。

java中的变量分为两种类型

- 基本类型

int、float、double、boolean、char…
不具备对象的特性(不能调用方法、功能简单)
直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面

为了让基本数据类型也具备对象的特性,JAVA为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

基本类型和包装类之间的对应关系

可以这么记:
int——>Integer
char——>Character
其他——>字母不变(首字母小写变大写)

包装类主要提供了两大类方法

  • 将本类型和其他基本类型进行转换的方法
  • 将字符串和本类型及包装类互相转换的方法

Integer包装类的常用方法
包装类——>基本数据类型

基本类型和包装类之间的转换

在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

Integer a = new Integer(3);     //定义Integer包装类对象,值为3
int b = a + 5;            //将对象和基本类型进行运算

装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱

int i = 10;           //定义一个int基本类型值
Integer x = new Integer(i);                //手动装箱
Integer y = i;                        //自动装箱

拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱

Integer j = new Integer(8);           //定义一个Integer包装类对象,值为8
int m = j.intValue();          //手动拆箱为int类型
int n = j;                        //自动拆箱为int类型

基本类型和字符串之间的转换

基本类型转换为字符串有三种方法:
1.使用包装类的toString()方法
2.使用String类的valueOf()方法
3.用一个空字符串加上基本类型

int c =10;            //基本数据类型
String str1 = Integer.toString(c);           //方法1
String str2 = String.valueOf(c);            //方法2
String str3 = c + " ";                             //方法3

字符串转换成基本类型有两种方法
1.调用包装类的parseXXX静态方法
2.调用包装类的valueOf()方法转换为基本类型的包装类,会自动拆箱

String str = "8";
int d  = Integer.parseInt(str);            //方法1
int  e = Integer.valueOf(str);            //方法2

注意:
parseInt(String s) 是把字符串——>基本数据类型 (返回int(以整型为例))
valueOf(String s) 是把字符串——>包装类对象 (返回Integer(以整型为例))

int  e = Integer.valueOf(str);

虽然valueOf(str)将字符串——>包装类对象,但是JAVA会自动拆箱,使其转换为基本类型。

.valueOf前面是什么就转成什么类型

- 引用类型

继承于Object类, 是一个对象类型。
按照Java里面存储对象的内存模型来进行数据存储的,使用内存堆和内存栈进行数据存储。
引用存储在有序的内存栈上的
对象本身的值存储在内存堆上的

基本数据类型和引用类型的主要区别
基本数据类型只有一块存储空间(分配在stack中)
引用类型有两块存储空间(一块在stack中,一块在heap中)


 在上图中引用类型在传参时不是在heap中再分配一块内存来存变量c 所指向的A(),而是让a 指向同一个A 的实例,这就与C++ 中的指针一样,先声明指针变量a,b,c,d 在传参的时候让a 指向c所指向的内存,让 d 指向 b 所指向的内存。很明显Java中的引用与C++中的指针在原理上是相类似的,但记住Java没有指针,只有引用。

  • 简单类型是按值传递
    Java 方法的参数是简单类型的时候,是按值传递的 。
    以参数形式传递简单类型的变量时,实际上是将参数的值作了一个拷贝传进方法函数的,那么在方法函数里再怎么改变值,其结果都只是改变了拷贝的值,而不是原值
    所以像swap(a,b)的例子,传进简单类型是不会交换的,只是把参数的副本进行了交换,原值还是不变。

  • 引用
    引用其实就像是一个对象的名字或者别名。
    一个对象在内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,我们不会直接是访问对象在内存中的数据,而是通过引用去访问引用也是一种数据类型,我们可以把它想象为类似 C++ 语言中指针的东西,它指示了对象在内存中的地址——只不过我们不能够观察到这个地址究竟是什么。
    如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定的内存空间(stack,栈空间)来保存。但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置。比如:

    String a=“This is a Text!”;

    String b=a;


 通过上面的代码和图形示例不难看出,a 和 b 是不同的两个引用,我们使用了两个定义语句来定义它们。但它们的值是一样的,都指向同一个对象 “This is a Text!”。
注意:String 对象的值本身是不可更改的 (像 b = “World”; b = a; 这种情况不是改变了 “World” 这一对象的值,而是改变了它的引用 b 的值使之指向了另一个 String 对象 a)。

两个要点

(1) 引用是一种数据类型(保存在stack中),保存了对象在内存(heap,堆空间)中的地址,这种类型即不是我们平时所说的简单数据类型也不是类实例(对象);

*(引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象中保存着内容)

(2) 不同的引用可能指向同一个对象,换句话说,一个对象可以有多个引用,即该类类型的变量。

本人原创,如转载请告知,如有问题,请交流!

java变量的两种类型相关推荐

  1. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  2. Java中的两种异常类型及其区别?

    Java中的两种异常类型及其区别? 参考文章: (1)Java中的两种异常类型及其区别? (2)https://www.cnblogs.com/zxfei/p/11182730.html (3)htt ...

  3. <随笔03>Java中的两种异常类型

    <随笔03>Java中的两种异常类型 参考文章: (1)<随笔03>Java中的两种异常类型 (2)https://www.cnblogs.com/newlyfly/p/744 ...

  4. Java 基础算法 短板问题 : 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer, 你必须正好使用 k 块

    题目 你正在使用一堆木板建造跳水板. 有两种类型的木板,其中长度较短的木板长度为 shorter ,长度较长的木板长度为 longer . 你必须正好使用 k 块木板.编写一个方法,生成跳水板所有可能 ...

  5. 设计一个处理两种类型地址的地址簿程序_编译器设计-符号表-中间代码生成

    编译器设计-符号表-中间代码生成 Compiler Design - Symbol Table Compiler - Intermediate Code Generation 一.Compiler D ...

  6. 按照姓名升序排序的代码_好程序员Java培训分享Java集合的两种排序方法

    好程序员Java培训分享Java集合的两种排序方法,Java集合的工具类Collections中提供了两种排序的方法,分别是: 1.Collections.sort(List list) 2.Coll ...

  7. Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型

    http://www.ibm.com/developerworks/cn/java/j-lo-spring-lob/index.html 本文讲解了在 Spring 中处理 LOB 数据的原理和方法, ...

  8. c语言上11e2是实型常量吗,在C语言中的实型变量分为两种类型.doc

    在C语言中的实型变量分为两种类型.doc 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c='\010';则变量c中包含的字 ...

  9. 对两种类型的蘑菇图像进行识别与分类——使用SVM分类器(matlab)

    该项目已免费开源!点个收藏和赞吧!https://gitee.com/zhengzsj/mushroom-classification-system-based-on-matlab-image-pro ...

最新文章

  1. NHIBERNATE
  2. 漫画:什么是 “并查集” ?
  3. 详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解...
  4. 深入理解计算机系统(1.3)---金字塔形的存储设备、操作系统的抽象概念
  5. 数据库-DQL练习(附答案)
  6. Semaphore用法
  7. hashset java_Java HashSet clear()方法与示例
  8. 线性最小二乘法的通俗理解
  9. linux ubutu书籍,Ubuntu Linux入门到精通[图书]
  10. n维数组的操作-04-p2
  11. Ubuntu 16.04 LTS 下Nginx的编译安装与启动
  12. 安徽省大数据比赛——数据可视化实战
  13. windows如何解压tar.gz文件
  14. 如何对接小发猫的伪原创API
  15. 微信小程序模拟器加载图片成功,真机加载失败
  16. ROOT大师PC版 v1.7.6.7190 绿色免费版
  17. java 一年有多少周_Java8根据一年中的第几周获得Monday
  18. 13个医学图像 AI 入门项目- 都跑完你就超神了!
  19. 世界五大著名黑客,你都认识吗?
  20. [Android app] 本地wifi密码查看器源码

热门文章

  1. 【BIOS】Win从零开始搭建EDK II环境
  2. too many open files解决方案
  3. 微信中如何长按图片保存的是另一张图片
  4. A型千本樱计算机音乐,【A+B】千本樱2017年重置版本
  5. python3打印如何换行_浅谈Python3中print函数的换行
  6. W25Q128数据手册阅读总结
  7. #46-【SPFA】MLH的一天(SPFA模板题)
  8. 在虚拟机中还原GHO镜像系统
  9. Cordova插件的简单使用
  10. 软件工程实验二:测试