• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

new Integer vs Integer.valueOf

 
Ranch Hand
Posts: 107
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
What is the difference between new Integer( string) vs Integer.valueOf( string)? I suppose variety is the spice of life, but is there any reason to create Integers one way over the other?
The specification notes:

In other words, this method returns an Integer object equal to the value of:
new Integer(Integer.parseInt(s))


I take that is sun's way of saying "no difference", correct?
 
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi Matt,
try the following code and review the results for different s[0] argument values. you will notice the difference.
i am not sure about the reason but this what i observed.
"for first for loop the time is higher than the second for loop".
this might lead us to a conclusion that- new Integer() is slower than Integer.valueOf()
actually, i tried this coder some days back to compare new Integer().intValue() and Integer.parseInt() which returns "int" and i observed that new Integer().intValue() is taking more time than Integer.parseInt().

here is a result snapshot of what i obtained for limit=9999999,
---------------------
5192 4399
5125 4384
5112 4382
5120 4390
5111 4390
5119 4383
5112 4382
5119 4383
5203 4389
5115 4389
5198 4386
5190 4384
5118 4387
5118 4588
5164 4393
5115 4388
5118 4405
5198 4406
5186 4382
5121 4382
5113 4392
5114 4389
5192 4343
5203 4345
5192 4355
5254 4367
5278 4388
5117 4345
5115 4350
5197 4351
5225 4343
5209 4345
5122 4350
5133 4351
5149 4343
5254 4345
5123 4377
---------------------
for the previous code which was comparing new Integer().intValue() and Integer.parseInt() i get the following snapshot for limit=9999999,
----------------------
5223 4402
5145 4390
5219 4402
5147 4375
5210 4381
5126 4376
5115 4383
5200 4381
5130 4376
5125 4376
5192 4386
5191 4386
5128 4375
5124 4377
5121 4386
5117 4382
5200 4376
5125 4381
5156 4398
5235 4401
----------------------
these results complies to my conclusion i guess.
here in second example we can argue that new Integer() calls constructor hence explicit object creation takes place and Integer.parseInt() doesn't call explicit constructor but to be frank i am not clear about the exact reason because anyways it has to call constructor at some point (even if it is calling it internally).
we can post this to Intermediate or Advance forum to get some convincing answer.
regards
maulin
 
Matt Horton
Ranch Hand
Posts: 107
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks for your time Maulin!
I ran your code and watched the same trend (where init arg: 1x10^6)
801 741
781 721
841 741
811 752
801 761
811 741
831 741
801 772
801 761
831 741
831 741
821 812
801 761
791 751
831 751
822 771
801 771
811 751
821 751
842 761
811 771
821 761
832 741
841 751
Interestingly, an additional order of magnitude (I first ran 10,000,000 objs by fat finger) shows much more variance, but the same general trend.
I wonder why Integer.valueOf would be so much faster than new Integer?? Thoughts? anyone?
 
Ranch Hand
Posts: 1879
MySQL Database Suse
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm looking at the code and it looks like there is a lot of room for compiler/JIT optimizations. Have a look at the bytecode to see what is actually being executed.
Jamie
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi Jamie,
i don't know how to look at byte code. can you tell me? i can't do just "vi OrderBy.class" right?
and i didn't understand your comment about Optimization. what that has to do with this performance matrix. Or was that related to the byte code stuff you wrote?
regards
maulin
 
Maulin Vasavada
Ranch Hand
Posts: 1873
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi all,
can somebody help me with the question i posted in the above post from me?
"how to read byte code" and "what to read in there"...
regards
maulin
 
author
Posts: 14112
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Maulin Vasavada:
i don't know how to look at byte code. can you tell me? i can't do just "vi OrderBy.class" right?


No, you can't. Use "javap -c <fully.qualified.classname>".
 
We begin by testing your absorbancy by exposing you to this tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic