Java 指针简介
今天,我们将学习 Java 中的指针以及如何通过使用它们来获得优势,但在此之前,我们将了解它们在 Java 中是否可用; 如果没有,还有哪些替代方案?
我们将在本文中回答所有这些问题。 我们还将指针与 C 和 C++ 等其他语言进行比较。
Java中的指针
众所周知,指针是存储内存地址的对象。 它们在地址管理和内存分配方面很方便,但只有在语言具有指针算术时才有效。
通常,语言都预先编程了指针算术,但 Java 的情况并非如此。 因此,对于某些人来说,Java 语言没有指针的概念可能听起来有点令人震惊。
相反,Java 语言将引用作为指针。 请记住,指针可以称为引用,但反之则不同,因为引用不是指针。
让我们通过本指南中的示例来详细研究这个概念。
Java中没有指针
大多数人声称 Java 没有指针会更好。 这是因为下面提到的原因。
-
算术 - 如上所述,指针使用算术进行运算。 此外,指针与内存管理一起工作,这从根本上来说是不安全的。
许多人可能会反驳,但事实上,让指针访问内存是不安全的。 因此,Java不支持指针运算。 并且不使用额外的内存。
-
操纵——用户很容易误用指针; 通过指针操作对象也是非常危险的。 总而言之,Java 在其面向对象编程中不需要指针。
而且,在Java语言中添加指针会不必要地导致复杂性的增加。
替代方案:Java 语言参考
如上所述,Java 中没有指针的概念。 因此,使用引用代替指针,因为它们的工作方式与指针相同。
术语指针是指 C 和 C++ 语言。 在Java中,我们不能使用指针,因此使用了一种称为引用的替代方法。 如前所述,引用的工作方式与指针相同,但它们的用法略有不同。
当使用引用时,它是通过函数完成的。 引用的副本被复制到用于调用对象的函数的堆栈中,并允许根据需要操作该对象。
即使用户想使用指针,也可以随意使用引用。 下面是一个示例,解释了 Java 中 Reference 的使用。
class Shape {
int length;
int breadth;
}
public class ShapesUse{
public static void main(String args[]){
/*
Here, an example1 is used as a reference variable.
Which means it holds the address of the Shapes object
*/
Shape example1 = new Shape();
/*
example2 is another reference variable used,
and example2 is initialized with example1
example1 and example2 reference the same object,
so no duplication and extra memory are used.
*/
Shape example2 = example1;
example1.length = 10;
example2.breadth = 26;
System.out.println("length of example 1 is: " + example1.length);
System.out.println("breath of example 1 is: " + example2.breadth);
}
}
在此示例中,使用 example1 和 example2 作为参考。 因为它们保存了对象形状的地址,并且通过这个对象来调用长度和宽度。
请记住,我们不能在该程序之外使用这些引用。 以下是上面代码的输出。 正如我们所看到的,参考文献按预期工作。
输出:
length of example 1 is: 10
breath of example 1 is: 26
在 Java 中使用引用作为指针的缺点
让我们看看 Java 语言中没有指针的一些缺点。
-
显式使用 - 虽然引用可以用作指针,但有一个缺点。 我们不能明确地使用引用。 我们不能在 Java 程序的作用域之外使用这些指针。
使用引用执行的任何操作都是隐式的,因此它们不可见。 这是一个很大的缺点,因为指针用于访问资源,而我们可以显式地执行此操作。
在 C 编程中,我们可以减去或加上指针的地址来指向事物。 然而,在Java中,引用只能指向一件事。
-
严格控制 - 引用的控制比 C 或 C++ 严格得多。 不幸的是,这意味着类型转换不可用。
然而,在指针中,我们可以将类型转换为 char,例如 int。 但在Java中,引用只能指向同一类型的对象。 因此,例如,我们只能对字符串类型的对象使用字符串引用。
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,