Java 中的交换原语:解决按值传递的局限性
在 Java 中,参数按值传递,尝试交换原语使用传统方法来衡量价值观可能是徒劳的。让我们深入研究一下演示这一点的代码片段:
<code class="java">public class SwapPrimitives { public static void swap(int a, int b) { int temp = a; a = b; b = temp; } public static void main(String[] args) { int x = 5; int y = 10; swap(x, y); System.out.println("x: " + x); // Output: 5 System.out.println("y: " + y); // Output: 10 } }</code>
此代码的目的是交换 x 和 y 的值,但正如您从输出中观察到的那样,这些值保持不变。这是因为 Java 按值传递,这意味着创建原始值的副本并将其传递给交换函数。在交换函数中对这些副本所做的任何更改都不会影响原始变量。
为了克服此限制并实现交换,我们可以采用一种利用 Java 方法返回功能的技术。通过在交换函数中添加 return 语句并将结果重新分配给调用者,我们可以间接交换值:
<code class="java">public static int swap(int a, int b) { // usage: y = swap(x, x=y); return a; } public static void main(String[] args) { int x = 5; int y = 10; y = swap(x, x = y); System.out.println("x: " + x); // Output: 10 System.out.println("y: " + y); // Output: 5 }</code>
在此修改后的代码中,交换函数返回 a 的值。但是,其主要目的是允许调用者将返回值重新分配给第一个参数(在本例中为 x)。这样就有效的实现了x和y的交换。这个函数的使用模式可能有点违反直觉,但它为在 Java 中交换基元提供了一个可行的解决方案。
如果您需要更通用的方法,您可以创建一个可以交换任意数量对象的方法相同类型的:
<code class="java">public static <t> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; } public static void main(String[] args) { int x = 5; int y = 10; int z = 15; z = swap(x, x = y, y = z); System.out.println("x: " + x); // Output: 15 System.out.println("y: " + y); // Output: 10 System.out.println("z: " + z); // Output: 5 }</t></code>
通过应用这些技术,尽管没有引用传递,您仍然可以有效地交换 Java 中的原语。
以上是考虑到按值传递的局限性,如何在 Java 中交换原始值?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。