Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8204322

"+=" applied to String operands can provoke side effects

    Details

    • Subcomponent:
    • Introduced In Build:
      b104
    • Introduced In Version:
      9
    • Resolved In Build:
      b17
    • CPU:
      x86_64
    • OS:
      generic
    • Verification:
      Verified

      Backports

        Description

        ADDITIONAL SYSTEM INFORMATION :
        OS: Windows, Unix
        Java: all versions of Java 9+

        A DESCRIPTION OF THE PROBLEM :
        When using the += operator, it seems that javac duplicates the code before the +=.

        Example:

        array[i++%n] += i + " ";

        This code is compiled as if it were:

        array[i++%n] = array[i++%n] + i + " ";

        REGRESSION : Last worked in version 8u172

        STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
        Run and execute the source code for the executable test

        EXPECTED VERSUS ACTUAL BEHAVIOR :
        EXPECTED -
        1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
        2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86 89 92 95 98 101
        3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
        ACTUAL -
        2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98
        2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102
        2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100

        ---------- BEGIN SOURCE ----------
        import java.util.*;
        public class Main {
          public static void main(String[] args) {
            int size = 3;
            String[] array = new String[size];
            Arrays.fill(array, "");
            for(int i = 0; i <= 100; ) {
              System.out.println(i);
              array[i++%size] += i + " ";
            }
            for(String element: array) {
              System.out.println(element);
            }
          }
        }

        ---------- END SOURCE ----------

        CUSTOMER SUBMITTED WORKAROUND :
        None found.

        FREQUENCY : always


          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  vromero Vicente Arturo Romero Zaldivar
                  Reporter:
                  webbuggrp Webbug Group
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  14 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: