A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币

最佳答案

查看完整内容

基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。 引用类型: 是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

7 个回复

正序浏览
楼上已经讲得很详细了。
基本数据类型 primitive 就那8种。
引用数据类型 reference 可以理解为指针,指向 可垃圾回收的heap中。注意,引用是指向对象,不是对象本身。
回复 使用道具 举报
为什么还需要基本类型这种非对象化的类型?
回复 使用道具 举报
基本类型  vs  引用类型

这个主题可以涉及很多方面的知识,现在讲太多弊大于利,因此我只从几个点作为切入来讲:
1.设计
设想一下,Java作为一种面向对象的编程语言,为什么还需要基本类型这种对象化的类型?
首先,来分析一下,在Java中是如何定义对象的?

  1. class Obj
  2. {
  3.    //字段
  4.    int  n = 12;  //基本类型 变量
  5.    String name = "Obj"; //引用类型 变量
  6.    
  7.    //方法
  8.    public void show()
  9.    {
  10.      System.out.println(this.name+": "+n);
  11.    }
  12. }
  13. Obj o = new Obj(); //引用类型 变量
  14.     o.show();
复制代码

以上,我们通过代码制定了对象生成的规范或类型---class Obj,当我们要生成Obj的对象时,我们就要按照这种规范的模子
来分配和赋值。注意到:
    1.模子中的字段中既有引用变量,又有基本变量;
    2.引用类型变量 和 基本类型变量存储内容不同
     例如: n 中存储 字面值12本身;而 name存储字符串字面值在字符串常量池中的引用(地址)
结论一:设计目的
1.基本类型主要是从C语言过度到面向对象编程语言中的保留类型(内置类型),设计用来存储各种字面值本身,主要目的是用来
作为类的基本构件,以表达类的属性特性。
2.引用类型用来封装基本类型变量,是类的组合型构件,也是面向对象各种特点的主要承载体。
3.为了完善Java的完全面向对象,Java提供了对基本类型的各种封装类。

----比如:我们不能说,n具有面向对象的封装性,但是name变量却具有封装性;如toString()方法
    可以说,没有引用型变量,根本无法面向对象。
    如 int   Integer

3.引用对象主要针对引用,因为对象体存储在堆空间,一般所占据的内存比基本类型变量中字面值所占空间大的多,操作对象无法
像操作字面值那样方便。因此,针对对象的操作(OOP中的大部分工作)不同于传统的针对基本类型变量的操作,也就引入了操作引用变量的折中方案。由于引用变量中存储的是对象实体的引用,操作变量实际上能沿着引用影响对象的实体。
结论二:内存分配
1.基本类型变量用于存储字面值,所占内存小。加上,操作基本类型变量比较频繁,为此存放在栈中。它的生成或消亡都比较高效。
2.引用类型变量也分配在栈中,但是它所存储的引用所指向的对象实体是在堆中或常量池中。

结论三:定义方式
1.左值右值结构: 对于基本类型其最完整的定义:基本类型 变量名 = 字面值(值表达式),其中=左边为左值结构,右边为右值结构
2.左右值结构结合new结构:
   对于引用类型变量,既可以采用左右值结构:如 引用类型 变量名 = 引用变量(返回引用的表达式)
                     也可以采用new结构: 如 Obj o = new Obj();其中new结构部分将返回某类型的引用。
今天就讲这些...
回复 使用道具 举报
Java_EE 来自手机 中级黑马 2015-9-10 14:59:04
板凳
java中的基本数据类型有8种:整型(字节型byte、短整型short、整型int、长整型long),小数类型(单精度float和双精度double),布尔类型(true或false);引用数据类型主要有三种:数组、类和接口。
回复 使用道具 举报
byte、short、 char、 int、 long、 float、  double、 boolean 都是基本数据类型

其他全部都是引用数据类型  

我的理解就是 基本数据类型的值会在栈内存中存在,
而引用数据类型的值在堆内存当中存在,在栈中存在的只是它们的地址引用
比如:String s = "abc";  它的值不在栈内存中存在,可能在字符串常量池中,然后s拿到的只是它在常量池中的地址值

有可能有错,仅供参考
回复 使用道具 举报
java的8种基本类型:
byte,short, char, int, long,float,double,boolean.
与此对应的,java提供了8种包装类型:
Byte,Short,Character,Integer,Long,Float,Double,Boolean.
它们之间的相互转换:例如:
double a=1;
//把double基本类型转换为Double包装类型
Double b=new Double(a);
//把Double包装类型转换为double基本类型
a=b.doubleValue();

所谓引用,就是指针了,就是说对象指向的不是数据本身,而是它所在的内存地址.
数组就是引用类型!
一般在传参的时候用的最多。
回复 使用道具 举报
基本类型:
基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。
引用类型:
是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马