首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用和调用方法中的Java方法参数

调用和调用方法中的Java方法参数
EN

Stack Overflow用户
提问于 2013-09-09 15:27:00
回答 3查看 107关注 0票数 0

只是简单的反向字符串方法。FYI,正确的方法是reverseString1和reverseString2,但是revereStirng3()不能给出正确的输出。我认为这是因为方法args和返回值存储在堆栈中,并且与这个概念相关。但我不清楚为什么revereStirng3()不能正确工作。请告诉我为什么这不管用。

这就是我所理解的,如果我错了,请纠正我。1.main()调用revereStirng3(A),其中传递的参数数组A存储在main()的堆栈框架中。

  1. revereStirng3(char[] A),其中传递的参数数组A存储在revereStirng3 3的方法框架中,这意味着main的A[]被复制到revereStirng3 3的堆栈框架的方法参数A[]中。
  2. 反转后,revereStirng3为返回字符串创建新的字符串(A)。
  3. 然后,我想,基本上,返回的新字符串(A)是正确打印反向字符串,但实际上没有。 //给定字符串"abcdef",将其反转。所以输出应该是"fedcba“。 导入java.util.*;公共类ReverseString {静态字符串revereStirng3(char[] A) { int n= A.length;for(int i=0;i
EN

回答 3

Stack Overflow用户

发布于 2013-09-09 15:43:52

好的,考虑到zenbeni已经得到了真正的结果,下面是所发生的事情。

Java中的数组是一个对象,所以在revereString1revereString3中,是对数组的引用的副本。因此,您的更改修改了原始数组,该数组(在第一个方法执行之后)已被反转。当然,第二次执行会再次逆转它,因此您将得到反向的反转,即原始字符串。

尝试使用一个新的、本地定义的数组来创建反向字符串,一切都会正常工作。

票数 1
EN

Stack Overflow用户

发布于 2013-09-09 15:45:08

来自apache commons:

代码语言:javascript
运行
复制
StringUtil.reverse(str);
票数 0
EN

Stack Overflow用户

发布于 2013-09-09 15:59:42

我复制了你的方法并执行了它。

System.out.println(revereStirng3("abcdef".toCharArray()));

结果是

fedcba

问题在于主要功能:

代码语言:javascript
运行
复制
 public static void main(String[] args) {
        String s = "abcdef";
        char[] A = s.toCharArray();

        System.out.println( revereStirng3(A));  // print out "abcdef"**

        revereStirng1(A);                       

        System.out.print(Arrays.toString(A));   // print out "fedcba"

        System.out.println(revereStirng2(s));   // print out "fedcba"
    }

你的评论没有显示出真相。

它的有效输出将是

代码语言:javascript
运行
复制
fedcba
[a,b,c,d,e,f]
fedcba

这是因为您对三个测试用例在相同的数组上操作。在第二步中,您将所有反转数组作为输入传递。这导致命令没有改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18701747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档