Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7160151
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 28, 20262026-05-28T13:21:06+00:00 2026-05-28T13:21:06+00:00

Why does the code below return false for long3 == long2 comparison even though

  • 0

Why does the code below return false for long3 == long2 comparison even though it’s literal.

public class Strings {

    public static void main(String[] args) {
        Long long1 = 256L + 256L;
        Long long2 = 512L;
        Long long3 = 512L;
        System.out.println(long3 == long2);
        System.out.println(long1.equals(long2));
    }
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-28T13:21:06+00:00Added an answer on May 28, 2026 at 1:21 pm

    Long is an object, not a primitive. By using == you’re comparing the reference values.

    You need to do:

    if(str.equals(str2))
    

    As you do in your second comparison.

    Edit: I get it … you are thinking that other objects act like String literals. They don’t*. And even then, you never want to use == with String literals either.

    (*Autobox types do implement the flyweight pattern, but only for values -128 -> 127. If you made your Long equal to 50 you would indeed have two references to the same flyweight object. And again, never use == to compare them. )

    Edit to add: This is specifically stated in the Java Language Specification, Section 5.1.7:

    If the value p being boxed is true, false, a byte, or a char in the range \u0000 to \u007f, or an int or short number between -128 and 127 (inclusive), then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

    Note that long is not specifically mentioned but the current Oracle and OpenJDK implementations do so (1.6 and 1.7), which is yet another reason to never use ==

    Long l = 5L;
    Long l2 = 5L;
    System.out.println(l == l2);
    l = 5000L;
    l2 = 5000L;
    System.out.println(l == l2);
    

    Outputs:

    true
    false

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Why does the code below return TRUE in Delphi 7 and FALSE in Delphi
Why does the code below return true only for a = 1? main(){ int
Code below does not run correctly and throws InvalidOperationExcepiton . public void Foo() {
Why does the code below result in org.datanucleus.exceptions.NucleusUserException: Object Manager has been closed? The
Why does the below code give Seg. Fault at last line? char* m=ReadName(); printf(\nRead
In the code below, why does the open function work but the close function
I have to code below - works great in IE and Opera, but does
In the below code sample, what does {0:X2} mean? This is from the reflection
I have this code below and the if ((DateTime)DataReader[0] > DateTime.Now) condition returns false
Does anyone know a way to detect if a button with this, code below,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.