原始类型和引用类型之间有什么区别?

时间:2012-01-09 15:30:37

标签: java types reference primitive

这是一个过去的考试问题,我想知道原始类型和参考类型首先是什么? 使用数组我知道引用类型是数组由对象或变量组成的位置,但是基本类型是用int或string创建数组的地方。 (右?)

您认为您如何回答测试中的问题并获得良好的信誉?没有真正直接引用原始ARRAY类型......有没有办法在没有它的情况下做到这一点?或者你认为用阵列解释它会没问题。

9 个答案:

答案 0 :(得分:113)

来自OCA JAVA SE 7的书

  

就像男人和女人根本不同(约翰说   格雷,“男人来自火星,女人来自金星”的作者,原始人   变量和对象引用变量彼此不同   多种方式。基本区别在于原始变量存储   实际值,而引用变量存储地址   他们引用的对象。我们假设一个Person类   已定义。如果创建一个int变量a和一个对象   引用变量人,他们将其值存储在内存中   如图2.13所示。

int a = 77;
Person person = new Person();

enter image description here

答案 1 :(得分:40)

这些是Java中的原始类型:

  • 布尔
  • 字节
  • INT

所有其他类型都是引用类型:它们引用对象。

这是Java tutorial about the basics of the language的第一部分。

答案 2 :(得分:7)

原始数据类型:

  • 由语言预定义并以关键字
  • 命名
  • 总数= 8
     布尔
     焦炭
     字节
     短
     整数
     长
     浮
     

参考/对象数据类型:

  • 使用类
  • 的已定义构造函数创建
  • 用于访问对象
  • 任何引用变量的默认值为null
  • 引用变量可用于引用声明类型或任何兼容类型的任何对象。

答案 3 :(得分:3)

这些是原始数据类型

  • 布尔
  • 字符
  • 字节
  • 整数

保存在内存中的堆栈中,另一方面是托管内存对象数据类型或存储在GC管理的内存中的引用数据类型

这是最重要的区别

答案 4 :(得分:2)

原语与参考文献

首先: -

原始类型是数据的基本类型: byteshortintlongfloatdoublebooleanchar。 原始变量存储原始值。 引用类型是任何可实例化的类以及数组: StringScannerRandomDieint[]String[]等 引用变量将地址存储到存储器中存储数据的位置。

第二: -

基元类型存储值,但引用类型存储句柄对堆空间中的对象。请记住,引用变量不是您在C和C ++中看到的指针,它们只是对象的句柄,因此您可以访问它们并对对象的状态进行一些更改。

了解详情:http://javarevisited.blogspot.com/2015/09/difference-between-primitive-and-reference-variable-java.html#ixzz3xVBhi2cr

答案 5 :(得分:2)

正如许多人或多或少正确地指出了引用和原始类型是什么一样,人们可能会对我们在Java中拥有一些更相关的类型感兴趣。这是java中类型的完整列表(据我所知(JDK 11))。

原始类型

描述一个值(而不是类型)。

11

引用类型

描述实例扩展对象(接口,类,枚举,数组)的具体类型。而且TypeParameter实际上是引用类型!

Integer

注意:基本类型和引用类型之间的区别使得必须依靠装箱转换对象实例中的基本类型,反之亦然。

注2:类型参数描述具有可选下限或上限的类型,并且可以在其上下文中通过名称进行引用(与通配符类型相反)。类型参数通常可以应用于参数化类型(类/接口)和方法。参数类型定义类型标识符。

通配符类型

表示未知类型(与TypeScript中的类型一样),可以通过使用super或extend来具有下限或上限。

? extends List<String>
? super ArrayList<String>

无效类型

一无所有。没有价值/实例。

void method();

空类型

唯一的表示是'null'。它特别用于类型干扰计算中。空是逻辑上属于任何类型的特殊情况(可以分配给任何类型的任何变量),但实际上不被认为是任何类型的实例(例如(null instanceof Object)== false)。

null

联盟类型

联合类型是实际上是一组替代类型的类型。可悲的是,在Java中,它仅适用于multi catch语句。

catch(IllegalStateException | IOException e) {}

干扰类型

与多种类型兼容的类型。由于在Java中,一个类最多只能有一个超类(Object没有),因此干扰类型只允许第一个类型为类,而其他所有类型都必须为接口类型。

void method(List<? extends List<?> & Comparable> comparableList) {}

未知类型

类型未知。某些Lambda定义(不包含在方括号中,单个参数)就是这种情况。

list.forEach(element -> System.out.println(element.toString)); //element is of unknown type

变量类型

通过声明'var'关键字的变量声明引入的未知类型。

var variable = list.get(0);

答案 6 :(得分:1)

简短的回答是原语是数据类型,而引用是指针,它们不保存它们的值,而是指向它们的值并在对象上使用。

<强> Primatives

布尔

字符

字节

整数

很多很好的参考资料可以解释这些基本概念。 http://www.javaforstudents.co.uk/Types

答案 7 :(得分:1)

原始数据类型

原始数据类型是由编程语言提供的基本类型,作为基本构建块。因此,它是预定义的数据类型。基本类型始终具有一个值。它存储简单的值。

它指定变量值的大小和类型,因此基本类型的大小取决于数据类型,并且没有其他方法。

这些是该语言中的保留关键字。因此,我们不能将这些名称用作变量,类或方法的名称。基本类型以小写字母开头。在声明原始类型时,我们不需要分配内存。 (内存由Java中的JRE- Java Runtime Environment 分配和释放)

Java中的8种原始数据类型

+================+=========+===================================================================================+
| Primitive type | Size    | Description                                                                       |
+================+=========+===================================================================================+
| byte           | 1 byte  | Stores whole numbers from -128 to 127                                             |
+----------------+---------+-----------------------------------------------------------------------------------+
| short          | 2 bytes | Stores whole numbers from -32,768 to 32,767                                       |
+----------------+---------+-----------------------------------------------------------------------------------+
| int            | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647                         |
+----------------+---------+-----------------------------------------------------------------------------------+
| long           | 8 bytes | Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
+----------------+---------+-----------------------------------------------------------------------------------+
| float          | 4 bytes | Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits           |
+----------------+---------+-----------------------------------------------------------------------------------+
| double         | 8 bytes | Stores fractional numbers. Sufficient for storing 15 decimal digits               |
+----------------+---------+-----------------------------------------------------------------------------------+
| char           | 2 bytes | Stores a single character/letter or ASCII values                                  |
+----------------+---------+-----------------------------------------------------------------------------------+
| boolean        | 1 bit   | Stores true or false values                                                       |
+----------------+---------+-----------------------------------------------------------------------------------+

参考数据类型

参考数据类型引用对象。这些类型中的大多数不是由编程语言定义的(除了String,JAVA中的数组)。值的引用类型可以为null。它存储所引用对象的地址。 引用或非原始数据类型的大小都相同。和引用类型可用于调用方法以执行某些操作。

当声明引用类型需要分配内存时。在Java中,我们使用了new关键字来分配内存,或者调用了工厂方法。

示例:

List< String > strings = new ArrayList<>() ;  // Calling `new`  to instantiate an object and thereby allocate memory.

Point point = Point(1,2) ;           // Calling a factory method.

答案 8 :(得分:0)

  1. Java有八种基本类型:int,double,float,long,short,byte,char,boolean。这意味着程序员无法定义新的基元类型。
  2. 引用类型是用户定义的,因此它们的数量不限。 4个java基本引用类型是:类,接口,数组,枚举。
  3. 原始类型表示单个值。引用类型聚合包含零个或多个原始值或对象的类型。
  4. 原始类型需要1到8个字节的内存。当原始值存储在变量中或传递给方法时,计算机会复制字节并保存值。另一方面,对象可能需要更多内存。