Ø        首先先举几个引用数据类型的例子:

String                 StringBuffer               类(包括自己定义的一些类和包中有的类)                     integer              等

Ø        下面的是基本数据类型

Int                       double               char                    Boolean                      等

表面上可以看出两个区别(单从类的角度来看):

1.        引用数据类型必须要实例化之后才可以使用,(String      和     integer除外)

注:String是一个很特殊的引用数据类型

Inteter是在在使用的过程中会自动的装箱和拆箱

例如:StringBuffer  sb  = new  StringBuffer();

2.        引用数据类型或多或少的会有一些属性和方法

例如:类里面包含的就是属性和方法,比如StringBuffer里面就有append()方法                  还有charAt()方法

深入点看:

3.        引用数据类型是指针的指向,基本数据类型则在内存中直接得到

1.下面一个例子是一个值传递的过程

例如:

下面是一个类的方法

public void changeNumber(int a,int b){int temp=a;a=b;b=temp;System.out.println("交换后的两数 a="+a+"  b="+b);}在main方法中public static void main(String[] args){//实例化的一个过程Exam9 ex=new Exam9();int a=10;int b=5;System.out.println("交换前的两数 a="+a+"  b="+b);//调用交换的方法ex.changeNumber(a, b);System.out.println("方法调用后的两数 a="+a+"  b="+b);
}

运行的结果是:

交换前的两数 a=10  b=5

交换后的两数 a=5  b=10

方法调用后的两数 a=10  b=5

这个是许多人都会犯的错误,包括我也犯了这个错误

就是:方法调用后的两数 a=5  b=10

解释:a变量和b变量在内存中的值已经有了,并且值是固定的

基本数据类型的传递是一个值传递的过程

2.下面的一个例子是一个引用类型的传递

里面有一个user类:里面有一个属性:String name =“tom”;

public void changeName(User user,String name){user.name=name;
}User user=new User();System.out.println("更改前的用户姓名:"+user.name);//调用更改名字的方法ex.changeName(user, "jack");System.out.println("更改后的用户姓名:"+user.name);

结果是:更改前的用户姓名:tom

更改后的用户姓名:jack

这个是个引用的数据类型,

引用数据类型就是一个指针的一个指向。

1.        这个例子也是一个引用数据类型的例子

public void change(StringBuffer bufferA,StringBuffer bufferB,StringBuffer bufferC){bufferA=new StringBuffer("AA");bufferB.append("B");bufferC=bufferA;bufferC.append("C");System.out.println("方法中:");System.out.println(bufferA);System.out.println(bufferB);System.out.println(bufferC);}/*** @param args*/public static void main(String[] args){StringBuffer bufferA=new StringBuffer("A");StringBuffer bufferB=new StringBuffer("B");StringBuffer bufferC=new StringBuffer("C");Exam10 ex=new Exam10();ex.change(bufferA, bufferB, bufferC);System.out.println("方法外");System.out.println(bufferA);System.out.println(bufferB);System.out.println(bufferC);}

运行的结果:

方法中的值大家都会的:

方法中:

AAC

BB

AAC

方法外

A

BB

C

关键是方法外面的System.out.println(bufferA);

这个比较难理解:

因为在方法体内部,有实例化了一个A对象,所以在方法里面的bufferA指向的是方法里面的A对象。和外面的没有联系。所以外面的还是指向原来的A对象,所以结果是A。

摘自百度文库lxl467344991

java中引用数据类型和基本数据类型的一些区别(貌似不完整,但会有些启示)相关推荐

  1. java中引用数据类型有哪几种

    本文主要介绍了java中引用数据的类型,具有很好的参考价值.希望对你有帮助.如有错误或不足之处,请不吝赐教. 目录 Java中的引用数据类型有哪些?先说Java中的引用数据类型:1.类别引用2.接口参 ...

  2. java中引用数据类型

    Java中有俩种数据类型,其中主要有8中基本数据类型和引用数据类型,除了8中基本数据类型以外都是引用数据类型,8中基本数据类型分别是byte,short,int,long,char,boolean,f ...

  3. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  4. java中 引用传递_Java中的引用传递

    我觉得引用传递  真的很好理解,不知道为什么大家觉得这么难,你只要掌握这几点就可以了 在Java机制中他自己提供的那些数据类型(String ,Object等)要这样理解: 1)在Java中  引用 ...

  5. Java 基础 | Java 中引用与指针的关系

    前言:关键字包含 #指针,java 引用,空指针,地址访问,引用类型,在 Java 编程语言中,程序员不需要担心程序的内存使用.Java 语言的自动垃圾收集器会不时地清理那些变成垃圾的对象. 如果垃圾 ...

  6. java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

    Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...

  7. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  8. Java中Array和ArrayList之间的9个区别

    array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...

  9. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  10. java中*和**的作用 以及 /和/*和/**的区别

    一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...

最新文章

  1. 【项目实战课】基于ncnn框架与KL散度的8bit对称模型量化与推理实战
  2. 专注创新型蛋白工具研发,上海恺佧生物科技完成3000万元Pre-A轮融资
  3. java中对象的序列化和反序列化
  4. Linux常用命令--文件(夹)查找之find命令
  5. rocketmq中各个角色介绍
  6. 有哪些命令行的软件堪称神器?
  7. 2、安装和连接mysql
  8. 前端学习(3036):vue+element今日头条管理-复习
  9. REVERSE-PRACTICE-BUUCTF-6
  10. linux 命令启动菜单栏,Linux守护进程的启动方法
  11. 禁用 ssh agent_如何修复“禁用Agent XP”错误
  12. 游戏ai人工智能_AI与游戏,第1部分:游戏如何推动了两门AI研究流派
  13. NgDL:第三周:浅层NN
  14. 3种方法解除RAR压缩文件的密码保护
  15. Promise的resolve方法和reject方法
  16. 休假管理系统的问题描述与词汇表
  17. 出方向链路负载均衡技术(原理部分)
  18. 人脑的计算能力有多强?
  19. jQuery插件Magnify放大镜实现javascript图片放大功能
  20. .NET CORE WEBAPI+VUE前后端分离工作流引擎ROADFLOW3.0更新发布

热门文章

  1. Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解
  2. c语言中static使用方法
  3. sql 单表/多表查询去除重复记录
  4. PHP错误提示的关闭方法详解
  5. siwper vue 上下滑动分页_支持移动端的vue滑动轮播图插件vueswiper
  6. 随想录(rtos和一般os的区别)
  7. C语言和设计模式(桥接模式)
  8. mysql内连接和外连接的区别_数据库左连接、右连接、内连接、全连接区别
  9. python历史5分钟数据_python每5分钟从kafka中提取数据的例子
  10. python备份目录下文件夹_Python备份目录及目录下的全部内容的实现方法