Java Programming - Operators and Assignments - Discussion

Discussion Forum : Operators and Assignments - Finding the output (Q.No. 3)
3.
What will be the output of the program?
class PassS 
{
    public static void main(String [] args) 
    {
        PassS p = new PassS();
        p.start();
    }

    void start() 
    {
        String s1 = "slip";
        String s2 = fix(s1);
        System.out.println(s1 + " " + s2);
    }

    String fix(String s1) 
    {
        s1 = s1 + "stream";
        System.out.print(s1 + " ");
        return "stream";
    }
}
slip stream
slipstream stream
stream slip stream
slipstream slip stream
Answer: Option
Explanation:

When the fix() method is first entered, start()'s s1 and fix()'s s1 reference variables both refer to the same String object (with a value of "slip"). Fix()'s s1 is reassigned to a new object that is created when the concatenation occurs (this second String object has a value of "slipstream"). When the program returns to start(), another String object is created, referred to by s2 and with a value of "stream".

Discussion:
30 comments Page 1 of 3.

Saravanan said:   1 decade ago
class PassS
{
public static void main(String [] args)
{
PassS p = new PassS();
p.start();
}

void start()
{
String s1 = "slip";
String s2 = fix(s1);
System.out.println(s1 + " " + s2); //line 13
}

String fix(String s1)
{
s1 = s1 + "stream";
System.out.print(s1 + " ");
return "stream";
}
}

See line 13.

System.out.println(s1 + " " + s2);

Slipstream slip stream.

The word slip in between is due to the s1 variable in line 13.

There are two print statements:

System.out.print(s1 + " "); //prints slipstream.
System.out.println(s1 + " " + s2); // prints slip stream.

Siddu said:   9 years ago
String S1=slip means s1 is declared and pointing to slip, now it's passed to fix's s1 which is declared in method parameter and pointing to same object slip.

Now fix's s1 is changed to slipstream, as string is immutable fix's s1 acts as different variable declared in method parameter and pointing to slipstream. But starts s1 remains unchanged.
(1)

Siddu said:   9 years ago
String S1=slip means s1 is declared and pointing to slip, now it's passed to fix's s1 which is declared in method parameter and pointing to same object slip.

Now fix's s1 is changed to slipstream, as string is immutable fix's s1 acts as different variable declared in method parameter and pointing to slipstream. But starts s1 remains unchanged.

Siddu said:   9 years ago
String S1=slip means s1 is declared and pointing to slip, now it's passed to fix's s1 which is declared in method parameter and pointing to same object slip.

Now fix's s1 is changed to slipstream, as string is immutable fix's s1 acts as different variable declared in method parameter and pointing to slipstream. But starts s1 remains unchanged.

Anjali Sadhukhan said:   1 decade ago
Option B should be the answer, as it does not give us the explanation about the slip placed in between. And even before that my logic say fix method return the value of s1 as slip stream (s1 = s1 + "stream";) an return statement return stream to s2. And then the o/p is shown.

Amit katiyar said:   1 decade ago
String Class is Immutable in Java.

So whenever we are concatenate a string object a new String object is created.

s1>>>>>>>>>Slip.

A method local s1 in fix method s1>>>>>>Slip Stream.

s2>>>>>>stream.

Poorani joe said:   9 years ago
In Java, the string is immutable that is we can't change the value.


Explantion:

s1 = s1 + "stream";

So, the local object is created s1 = slipstream, The first s1 value is slip.

return "stream";

The value is return to s2.

Raj said:   1 decade ago
Because of the s1 object created with new string means s1 gets modified value in fix() and it return to start(),

Then again s1 modified & new object created and stored in s2.

Nazir said:   1 decade ago
I am not getting the point. And can't understand how to solve this kind of problem. Its answer is right but output is logically different from the previous question.

Dilip Kumar said:   1 decade ago
Here in this s1 in fix has value "slipstream" how come it changed to "slip" when control returned to start()? Can any one help me?


Post your comments here:

Your comments will be displayed after verification.