2017-04-22 116 views
-3

我已经得到了这段代码,我也得到了它的答案,但我不明白他们是如何出来的,具体什么(x+" "+y)部分以及changeUs(x, y),谁能解释一下?`x +“”+ y`和`changeUs(x,y)`的意义`

public class ChangeParam { 

    public static void main(String[] args) { 
     int x = 1; 
     double y = 3.4; 
     System.out.println(x+" "+y); 
     changeUs(x, y); 
     System.out.println(x+" "+y);   
    } 

    public static void changeUs(int x, double y) { 
     x = 0; 
     y = 0.0; 
     System.out.println(x +" "+y); 
    } 
} 

的答案是:

1 3.4 

0 0.0 

1 3.4 

回答

2

这是逻辑的,因为爪哇传值不通过引用

当您拨打changeUs(x, y)时,xy只会在该方法中更改,因为您会得到此结果。

public static void main(String[] args) { 
    int x = 1; 
    double y = 3.4; 
    System.out.println(x+" "+y);//<<-------- 1- This will print 1 3.4 
    changeUs(x, y); 
    System.out.println(x+" "+y);//<<-------- 3- This will print 1 3.4   
} 

public static void changeUs(int x, double y) { 
    x = 0; 
    y = 0.0; 
    System.out.println(x +" "+y);//<<-------- 2- This will print 0 0.0 
} 
+0

haleliuja @YCF_L非常感谢你 – xafierz

+0

欢迎你@xafierz –

0

您应该阅读和学习教程和Java语言规范。首先解释的是运营商的语义,如+。在那里你会发现当+的任一操作数的类型为String时,其他操作数通过隐式调用String.valueOf转换为String,使整个表达式成为String连接。

+0

好吧,你看,我知道+的工作原理,但事实是,我从来没有见过这样的东西,有X +,然后“,这对我来说只是一个非常令人困惑的插件@Lew Bloch – xafierz

+0

好吧,但是你真的不知道'+'是如何工作的,当任何一个操作数是一个String参考;如果另一个操作数是不是'String',那么应用'String.valueOf','+'两个操作数必须是相同的类型,转换后。查看操作符的文档。 –

+0

是的,我相信我认为我知道的方式它是如何工作的只是对它看起来的一种视觉记忆,当我看到这让我感到困惑时,但如果我真的了解了它,我自己就可以自己解决问题了。无论如何都要求你帮忙! :) @Lew Bloch – xafierz

0

System.out.println() - 这里,println是一种接受String类型作为参数(String或者已被转换为String的类型)的方法。
所以,我们传递一个String。但是,你需要展示两件事情(x和y),你会怎么做?
在java中,'+'运算符在操作数为字符串类型时充当串联运算符,因此x+" "+y会将“x”和“y”之间的空格组合起来。
所以,如果x="HELLO"y="WORLD",那么x+y将是HELLOWORLD
给予在之间的空间中,x+" "+y会给我们带来更清洁和更可读的答案:HELLO WORLD

其中作为

changeUS() 

是取在两个参数的方法(具体而言是静态方法)(非常类似于需要两个参数的数学函数)。

因此,我们将两个“事物”传递给函数。现在,我怎么知道该功能需要两个参数?要知道我必须知道函数的定义。正如我看到的,函数被定义为:

public static void changeUs(int x, double y) { 
x = 0; 
y = 0.0; 
System.out.println(x +" "+y);} 


第一行:enter code here:公共静态无效changeUs(INT的x,双Y)which says that changeUs takes int和double`作为其参数。


因此,传递一个整数和一个浮点数(double是一个更高精度的浮点数)。
但是,为什么我们要做System.out.println,但是对于changeUs,我们只是称它没有任何前缀? 这是因为changeUs是一个'静态'方法,不需要对象来操作。

+0

感谢您深入了解这一点,我现在学到的东西比以往任何时候都多,非常感谢@Rahul Bharadwaj – xafierz

+0

我很抱歉,由于某种原因,我不能让任何东西upvote,而且我不会让你成为正确的答案,因为它已经在前面解释过了,但是你已经深深地感受到了这一点,甚至超过了我所问的问题,如果我能够给出任何其他类型的声望,我会:) @ Rahul Bharadwaj – xafierz

+0

没问题。 你问的问题确实很笼统,​​涵盖了很多概念。 SO侧重于具体问题/问题。所以,从基本的Java教程开始。如果您解决问题,请在对SO进行质疑之前进行彻底的网络搜索。 这也是我的错误,不应该仅仅为了赞成票和声誉而回答! –