[Question]
  [
Are there any useful shortcuts that can be used in Java? 
As shown below, `import` already adds at least 17 characters to a program. 
```
import java.io.*;
```
I understand that the simple solution would be to use another language, but it seems to be a real challenge to shorten Java programs.
---
Tips should be specific to Java: if they're applicable to most C-like languages, they belong in the more [general list of tips](https://codegolf.stackexchange.com/questions/5285/tips-for-golfing-in-all-languages).
  
[Answer]
* Use the most recent possible java. Java 8 lets you use lambda expressions, so use it if you need anything even *like* functional objects.
* Define shortened functions for things you use a lot. For instance, you have a hundred calls to `exampleClassInstance.doSomething(someParameter)`, define a new function `void d(ParameterType p){exampleClassInstance.doSomething(p)}` and use it to save yourself some characters.
* If you are using a particular long class name more than once, like
```
MyEventHandlerProxyQueueExecutorServiceCollectionAccessManagerFactory
```
instead define a new class:
```
class X extends MyEventHandlerProxyQueueExecutorServiceCollectionAccessManagerFactory{}
```
If you are only using one particular method of that class (but still need to instantiate it), you can define a shortened version inside the new class at the same time.
* Use function type parameters to shorten things, where possible, like this:
```
<T>void p(T o){System.out.println(o);}
```
* Use `for(;;)` instead of `while(true)`.
* Do not use access modifiers unless absolutely necessary.
* Do not use `final` for anything.
* Never put a block after a `for` loop (but a foreach loop `for(x:y)` is different). Additional statements should be placed inside the `for` statement itself, like `for(int i=0;i<m;a(i),b(++i))c(i);`.
* Use inline assignment, incrementation, instantiation. Use anonymous inline classes where appropriate. Use lambdas instead if possible. Nest function calls. Some functions are guaranteed to return their parent object, these ones are actually even *meant* to be chained together.
* Your `main` method `throws Exception`s, not catches them.
* `Error` is shorter than `Exception`. If for some reason you *really* need to `throw` messages up the stack, use an `Error`, even if it is perfectly normal situation.
* If some condition would require immediate termination, use `int a=1/0;` rather than `throw null;` or `System.exit(0);`. At run time, this throws an `ArithmeticException`. If you already have a numeric variable in your code, use it instead. (If you already have `import static java.lang.System.*;`, go with `exit(0);`.)
* Instead of implementing interfaces, like `List<E>`, extend an immediate (or not-so-immediate, if there is any advantage to doing so at all) child class, like `AbstractList<E>`, which provides default implementations of most of the methods, and requires only the implementation of a few key pieces.
* Write your code out in longhand first, with newlines, indentation, and full variable names. Once you have working code, then you can shorten names, move declarations around, and add shortcut methods. By writing it out long to start, you give yourself more opportunity to simplify the program as a whole.
* Compare alternative optimizations to a piece of code, because the most optimal strategy can change dramatically with very small changes to the code. For instance:
	+ If you have only up to two calls to `Arrays.sort(a)`, the most efficient way to is to call it with its fully qualified name, `java.util.Arrays.sort(a)`.
	+ With three or more calls, it is more efficient to instead add a shortcut method `void s(int[]a){java.util.Arrays.sort(a);}`. This should still use the fully-qualified name in this case. (If you need more than one overload, you are probably doing it wrong.)
	+ However, if your code needs to also copy an array at some point (usually done with a short `for` loop in golfing, in the absence of an easily-accessible library method), you can take advantage of `Arrays.copyOf` to do the task. When more than one method is used, and there are 3 or more calls, doing `import static java.util.Arrays.*;` is the most efficient way of referring to those methods. After that, only if you have more than 8 separate calls to `sort` should you be using a shortcut method for it, and only at 5 or more calls is a shortcut warranted for `copyOf`.The only real way of performing such analysis on code is to actually perform potential modifications on copies of the code, and then compare the results.
* Avoid using `someTypeValue.toString();` method, instead just append `someTypeValue+""`.
* If you do need windows, don't use Swing, use AWT (unless you really need something from Swing). Compare `import javax.swing.*;` and `import java.awt.*;`. Additionally, components in Swing have a `J` prepended to their name (`JFrame`, `JLabel`, etc), but components in AWT don't (`Frame`, `Label`, etc)
[Answer]
**Use `interface` instead of `class`.**
In java 8, static methods were added to interfaces. In interfaces, all methods are public by default. Consequently
```
class A{public static void main(String[]a){}}
```
can now be shortened to
```
interface A{static void main(String[]a){}}
```
which is obviously shorter.
For example, [I used](https://codegolf.stackexchange.com/a/64567/32700) this feature in the [Hello, World!](https://codegolf.stackexchange.com/q/55422/32700) challenge.
[Answer]
With [varargs](http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html) you can "cast" a parameter to an array of the same type:
```
void f(String...x){
    x=x[0].split("someregex");
    // some code using the array
}
```
instead of
```
void f(String s){
    String[]x=s.split("someregex");
    // some code using the array
}
```
[Answer]
With a **static import**:
```
import static java.lang.System.out;
// even shorter (thanks to Johannes Kuhn):
import static java.lang.System.*;
```
you can save some boilerplate later, but you need multiple invocations to reach a payoff:
```
public static void main (String[] args) {
    out.println ("foo");    
    out.println ("bar");    
    out.println ("baz");    
}
```
[Answer]
The argument to `main` doesn't have to be called `args`, and you can cut some whitespace:
```
public static void main(String[]a){}
```
will do just fine.
[Answer]
If you ever have to use the boolean expressions `true` or `false`, replace them with `1>0` and `1<0` respectively.
For example:
```
boolean found=false;
for(i=0; i<10; i++) if(a[i]==42) found=true;
```
This linear search example can be reduced to
```
boolean f=1<0;
for(i=0;i<10;)if(a[i++]==42)f=1>0;
```
[Answer]
This may seem obvious, but there are shorter options for some `Math` functions:
```
a=Math.max(b,c);
a=b>c?b:c;
a=Math.min(b,c);
a=b<c?b:c;
a=Math.abs(b);
a=b<0?-b:b;
(In certain situations, (a|1)%2*a, may be shorter)
a=Math.round(b);
a=(int)(b+.5);          // watch for precision loss if it matters
```
[Answer]
If you are going to be using some method a lot, assign its resident class to a variable. For example, assign `System.out` to a variable:
```
java.io.PrintStream o=System.out;
//now I can call o.print() or o.println() to the same effect as System.out.println()
```
Also for `Integer.parseInt()`:
```
Integer i=1;
i.parseInt("some string");
```
This will almost surely trigger an ide warning about "accessing static method from variable"
[Answer]
Rather than using the `import static java.lang.System.*` technique to save on `println()` statements, I've found that defining the following method is much more effective at saving characters:
```
static<T>void p(T p){
    System.out.println(p);
}
```
This is because it can be invoked as `p(myString)` rather than `out.println(myString)` which has a much quicker and more dramatic character payoff.
[Answer]
# Some small code-golfing tips
These tips were a bit too small for a separated answers, so I will use this answer for very small codegolfing tips that I found or came up with, and aren't mentioned in the other tips yet:
### Removing the last character of a String:
```
// I used to do something like this:
s.substring(0,s.length()-1)     // 27 bytes
// But this is shorter:
s.replaceAll(".$","")           // 21 bytes
```
In some cases you know what the last character is beforehand, and you also know this character only occurs once in the String. In that case you can use `.split` instead:
```
// As example: "100%" to "100"
s.split("%")[0]                 // 15 bytes
```
### Encoding shortcuts:
```
// When you want to get the UTF-8 bytes I used to do this:
s.getBytes("UTF-8");     // 20 bytes
// But you can also use "UTF8" for the same result:
s.getBytes("UTF8");      // 19 bytes
```
All encodings have a canonical name used in the `java.nio` API, as well as a canonical name used in the `java.io` and `java.lang` APIs. [Here is a full list of all supported encodings in Java.](https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html) So always use the shortest of the two; the second is usually shorter (like `UTF-8` vs `utf8`, `Windows-1252` vs `Cp1252`, etc.), but not always (`UTF-16BE` vs `UnicodeBigUnmarked`).
### Random boolean:
```
// You could do something like this:
new java.util.Random().nextBoolean()     // 36 bytes
// But as mentioned before in @Geobits' answer, Math.random() doesn't require an import:
Math.random()<.5                         // 16 bytes
```
### Primes:
There are a lot of different ways to check for primes or get all primes. [@SaraJ's answer here](https://codegolf.stackexchange.com/a/181611/52210) is the shortest for positive integers (\$\geq1\$), and *@primo*'s method is the shortest for integers \$\geq2\$.
```
// Check if n (≥ 1) is a prime (@SaraJ's method):
n->{int i=1;for(;n%++i%n>0;);return n==i;}
// Check if n (≥ 2) is a prime (@primo's method):
n->{int i=n;for(;n%--i>0;);return i<2;}
```
These prime checks can be modified to loop over primes. Here doing so with *@SaraJ*'s approach for example:
```
v->{for(int n=2,i;;){for(i=1;n%++i%n>0;);if(n++==i)/*do something with prime `i` here*/;}}
```
NOTE: Usually you can merge it with other existing loops depending on how you want to use it, so you won't need a separate method. This saved a lot of bytes in [this answer](https://codegolf.stackexchange.com/a/128774/52210) for example.
### Integer truncation instead of Math.floor/Math.ceil:
If you are using ***positive*** doubles/floats and you want to `floor` them, don't use `Math.floor` but use an `(int)`-cast instead (since Java truncates on integers):
```
double d = 54.99;
int n=(int)Math.floor(d);     // 25 bytes
int m=(int)d;                 // 13 bytes
// Outputs 54 for both
```
The same trick can be applied to ***negative*** doubles/floats you want to `ceil` instead:
```
double d = -54.99;
int n=(int)Math.ceil(d);     // 24 bytes
int m=(int)d;                // 13 bytes
// Outputs -54 for both
```
### Use `&1` instead of `%2` to get rid of parenthesis:
Because the [Operator Precedence](http://www.cs.bilkent.edu.tr/~guvenir/courses/CS101/op_precedence.html) of `&` is lower than default arithmetic operators like `*/+-` and `%`, you can get rid of parenthesis in some cases.
```
// So instead of this:
(i+j)%2     // 7 bytes
// Use this:
i+j&1       // 5 bytes
```
Note that this doesn't really help in boolean-checks, because then you'd still need parenthesis, they're just moved a bit:
```
(i+j)%2<1    // 9 bytes
(i+j&1)<1    // 9 bytes
```
### BigIntegers and creating variables for static method calls:
When using BigIntegers, only create it once which you can then re-use. As you may know, BigInteger contains static fields for `ZERO`, `ONE` and `TEN`. So when you only use those three, you don't need an `import` but can use `java.Math.BigInteger` directly.
```
// So instead of this:
import java.math.BigInteger.*;
BigInteger a=BigInteger.ONE,b=BigInteger.ZERO;                // 76 bytes
// or this:
java.math.BigInteger a=java.math.BigInteger.ONE,b=a.ZERO;     // 57 bytes
// Use this:
java.math.BigInteger t=null,a=t.ONE,b=t.ZERO;                 // 45 bytes                  
```
NOTE: You have to use `=null` so `t` is initialized in order to use `t.`.
Sometimes you can add multiple BigIntegers to create another to save bytes. So let's say you want to have the BigIntegers `1,10,12` for some reason:
```
// So instead of this:
BigInteger t=null,a=t.ONE,b=t.TEN,c=new BigInteger(12);     // 55 bytes
// Use this:
BigInteger t=null,a=t.ONE,b=t.TEN,c=b.add(a).add(a);        // 52 bytes
```
As correctly pointed out in the comments, the trick with `BigInteger t=null;` for it's static method calls can also be used with other classes.  
For example, [this answer](https://codegolf.stackexchange.com/a/1525/52210) from 2011 can be golfed:
```
// 173 bytes:
import java.util.*;class g{public static void main(String[]p){String[]a=p[0].split(""),b=p[1].split("");Arrays.sort(a);Arrays.sort(b);System.out.print(Arrays.equals(a,b));}}
// 163 bytes
class g{public static void main(String[]p){java.util.Arrays x=null;String[]a=p[0].split(""),b=p[1].split("");x.sort(a);x.sort(b);System.out.print(x.equals(a,b));}}
```
### `getBytes()` instead of `toCharArray()`
When you want to loop over the characters of a String, you'll usually do this:
```
for(char c:s.toCharArray())    // 27 bytes
// or this:
for(String c:s.split(""))      // 25 bytes
```
Looping over the characters can be useful when printing them, or appending them to a String, or something similar.
However, if you only use the chars for some unicode-number calculations, you can replace the `char` with `int`, AND you can replace `toCharArray()` with `getBytes()`:
```
for(int c:s.getBytes())        // 23 bytes
```
Or even shorter in Java 8+:
```
s.chars().forEach(c->...)      // 22 bytes
```
In Java 10+ looping over the character to print can now also be done in 22 bytes:
```
for(var c:s.split(""))         // 22 bytes
```
### Random item from a `List`:
```
List l=...;
// When we have an `import java.util.*;` in our code, shuffling is shortest:
return l.get(new Random().nextInt(l.size()));     // 45 bytes
return l.get((int)(Math.random()*l.size()));      // 44 bytes
Collections.shuffle(l);return l.get(0);           // 39 bytes
// When we don't have an `import java.util.*` in our code, `Math.random` is shortest:
return l.get(new java.util.Random().nextInt(l.size()));     // 55 bytes
return l.get((int)(Math.random()*l.size()));                // 44 bytes
java.util.Collections.shuffle(l);return l.get(0);           // 49 bytes
```
### Check if a String contains leading/trailing spaces
```
String s=...;
// I used to use a regex like this:
s.matches(" .*|.* ")     // 20 bytes
// But this is shorter:
!s.trim().equals(s)      // 19 bytes
// And this is even shorter due to a nice feature of String#trim:
s!=s.trim()              // 11 bytes
```
Why does this work, when `!=` on Strings is to check for reference instead of value in Java? Because [`String#trim`](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()) will return "*A copy of this string with leading and trailing white space removed, or **this string if it has no leading or trailing white space**.*" I've used this, after someone suggested this to me, in [this answer of mine](https://codegolf.stackexchange.com/a/143387/52210).
### Palindrome:
To check if a String is a palindrome (keeping in mind both even and odd lengths of Strings), this is the shortest (`.contains` works here because we know both the String itself and its reversed form are of equal length):
```
String s=...;
s.contains(new StringBuffer(s).reverse())    // 41 bytes
```
`.contains(...)` instead of `.equals(...+"")` thanks to [*@assylias*'s comment here](https://codegolf.stackexchange.com/questions/153249/list-all-palindromic-prime-dates-between-0000-01-01-and-99999-12-31/153255#comment374815_153255).
### Either is 0, or both are 0?
I think most already know this one: if you want to check if either `a` or `b` is zero, multiply instead to save bytes:
```
a==0|b==0    // 9 bytes
a*b==0       // 6 bytes
```
And if you want to check if both `a` and `b` are zero, you could use a bitwise-OR, or add them together if they are always positive:
```
a==0&b==0    // 9 bytes
(a|b)==0     // 8 bytes (if either `a`, `b` or both can be negative)
a+b<1        // 5 bytes (this only works if neither `a` nor `b` can be negative)
```
### Even = 1, odd = -1; or vice-versa
```
// even = 1; odd = -1:
n%2<1?1:-1        // 10 bytes
1-n%2*2           // 7 bytes
// even = -1; odd = 1:
n%2<1?-1:1        // 10 bytes
n%2*2-1           // 7 bytes
```
The reason I add this was after seeing `k+(k%2<1?1:-1)` in [this answer](https://codegolf.stackexchange.com/a/64269/52210):
```
k+(k%2<1?1:-1)    // 14 bytes
// This would already have been shorter:
k%2<1?k+1:k-1     // 13 bytes
// But it can also be:
k%2*-2-~k         // 9 bytes
```
### Loop `n` times in Full Program
If we have a challenge where a full program is mandatory, and we need to loop a specific amount of times, we can do the following:
```
// instead of:
interface M{static void main(String[]a){for(int n=50;n-->0;)/*do something*/}}  // 78 bytes
// we could do:
interface M{static void main(String[]a){for(M m:new M[50])/*do something*/}}    // 76 bytes
```
The same applies when we have to take this range as input:
```
interface M{static void main(String[]a){for(int n=new Byte(a[0]);n-->0;)/*do something*/}}  // 90 bytes
interface M{static void main(String[]a){for(M m:new M[new Byte(a[0])])/*do something*/}}    // 88 bytes
```
Credit to [*@JackAmmo* in this comment](https://codegolf.stackexchange.com/questions/67921/what-is-the-smallest-positive-base-10-integer-that-can-be-printed-by-a-program-s#comment165935_67983).
### try-finally instead of try-catch(Exception e), and when/how to use it
If you have to catch and ignore an Exception, in most cases it's shorter to use `finally{...;}` instead of `catch(Exception){}`. Some examples:
When you want to return the result as soon as you hit an error:
```
try{...}catch(Exception e){return ...;}    // 33 bytes
try{...}finally{return ...;}               // 22 bytes
```
I've used this initially to save bytes in [this answer of mine](https://codegolf.stackexchange.com/a/153993/52210) (credit for the indirect golf goes to *@KamilDrakari*). In this challenge we have to loop diagonally over an NxM matrix, so we have to determine whether the amount of columns or amount of rows is the lowest as our maximum in the for-loop (which is quite expensive in terms of bytes: `i<Math.min(a.length,a[0].length)`). So, simply catching the `ArrayIndexOutOfBoundsException` using `catch-finally` is shorter than this check, and thus saves bytes:
```
int[] a = ...;
int r=0,i=0;for(;i<Math.min(a.length,a[0].length);)r=...i++...;return r;    // 66 bytes
int r=0,i=0;try{for(;;)r=...i++...;}finally{return r;}                      // 48 bytes
```
This also works with a void `return;`, like this:
```
try{...}catch(Exception e){}  // 25 bytes
try{...}finally{return;}      // 21 bytes
```
Which actually saved an additional byte in that same linked answer above by putting the answer in the very first cell, like [*@KamilDrakari* does in his C# answer](https://codegolf.stackexchange.com/a/154011/52210) as well:
```
m->{try{for(...);}finally{return;}}
```
But what about a try-catch where you don't want to immediately return? Unfortunately, you can't have a completely empty `finally{}` block as alternative to catch an Exception. You can however still use it inside a loop by using `continue` (or `break`) as alternatives. Here an example where we want to continue with the next iteration of the loop when an Exception occurs:
```
for(...)try{...}catch(Exception e){}  // 30 bytes
for(...)try{...}finally{continue;}    // 28 bytes
```
I've used this approach in [this answer of mine](https://codegolf.stackexchange.com/a/154563/52210) to save 2 bytes.
So when you can use a `return`, `continue` or `break`, it's always better to use `try{...}finally{...;}` instead of `try{...}catch(Exception e){}`. And in most cases, especially when checking boundaries of matrices, it's shorter to `try-finally` any `ArrayIndexOutOfBoundsExceptions`, instead of doing manual checks to see whether the indices are still in bounds.
### Math.pow(2,n)
When you want a power of 2, a bit-wise approach is much shorter:
```
(int)Math.pow(2,n)    // 16 bytes
(1<<n)                // 6 bytes
```
### Combining bit-wise and logical checks instead of using parenthesis
I think it is well-known by now that `&` and `|` can be used instead of `&&` and `||` in Java (boolean) logical checks. In some cases you'd still want to use `&&` instead of `&` to prevent errors though, like `index >= 0 && array[index].doSomething`. If the `&&` would be changed to `&` here, it will still evaluate the part where it uses the index in the array, causing an `ArrayIndexOutOfBoundsException`, hence the use of `&&` in this case instead of `&`.
So far the basics of `&&`/`||` vs `&`/`|` in Java.
When you want to check `(A or B) and C`, the shortest might seem to use the bit-wise operators like this:
```
(A|B)&C    // 7 bytes
```
However, because the bit-wise operators have [operator precedence](https://introcs.cs.princeton.edu/java/11precedence/) over the logical checks, you can combine both to save a byte here:
```
A|B&&C     // 6 bytes
```
### Use `n+=...-n` instead of `(long)...`
When you have a long as both in and output in a lambda, for example when using `Math.pow`, you can save a byte by using `n+=...-n` instead of `(long)...`.  
For example:
```
n->(long)Math.pow(10,n)    // 23 bytes
n->n+=Math.pow(10,n)-n     // 22 bytes
```
This saved a byte in [this answer of mine](https://codegolf.stackexchange.com/questions/161281/make-an-emergency-corridor/161346#161346), and even two bytes by combining `-n-1` to `+~n` in [this answer of mine](https://codegolf.stackexchange.com/questions/163737/return-the-highest-possible-placement-value-based-on-the-input/163783#163783).
[Answer]
If you need `Integer.MAX_VALUE` (2147483647), use `-1>>>1`. `Integer.MIN_VALUE` (-2147483648) is better written `1<<31`.
[Answer]
Don't use `public class`. The main method needs to be public, but its class doesn't. This code works:
```
class S{public static void main(String[]a){System.out.println("works");}}
```
You may run `java S` even though `class S` is not a public class. (*Update:* I was using Java 7 when I wrote this tip. In Java 8, [your main method should be in an interface](https://codegolf.stackexchange.com/a/64713/4065). In Java 5 or 6, [your main method should be in an enum](https://codegolf.stackexchange.com/a/140181/4065).)
Plenty of Java programmers don't know this! About half the answers to [a Stack Overflow question about main in non-public class](https://stackoverflow.com/q/12524322/3614563) wrongly claim that the main method must be in a public class. Now you know better. Delete the `public` in `public class` and save 7 characters.
[Answer]
You don't have to use `Character.toLowerCase(char c)`. Instead use `(c|32)`. Instead of `Character.toUpperCase(char c)` use `(c&95)`. This only works with ASCII letters.
[Answer]
If you need to grab *a number* from an argument (or any other string), normally you see something like:
```
public static void main(String[]a){
    int n=Integer.valueOf(a[0]);
    ...
}
```
Many times, you don't *need* an `Integer`. Plenty of challenges don't use large numbers. Since `Short` and `Byte` will both unbox to an `int`, use the more appropriate `valueOf()` instead and save a couple bytes.
Keep your actual *variable* as an `int`, though, since it's shorter than both `byte` and `short`:
```
int n=Byte.valueOf(a[0]);
```
If you need to do this for multiple numbers, you can combine with [this method](https://codegolf.stackexchange.com/a/16089/14215):
```
Byte b=1;
int n=b.valueOf(a[0]),m=b.valueOf(a[1])...
```
[Answer]
# Convert String to number
There are multiple ways to convert a String to an numeric value:
```
String s = "12";
```
*ABC.parseABC*:
```
Short.parseShort(s); // 20 bytes
Integer.parseInt(s); // 20 bytes
Long.parseLong(s);   // 18 bytes
```
*ABC.valueOf*:
```
Short.valueOf(s);    // 17 bytes
Integer.valueOf(s);  // 19 bytes
Long.valueOf(s);     // 16 bytes
```
*ABC.decode*:
```
// Note: does not work for numeric values with leading zeros,
// since these will be converted to octal numbers instead
Short.decode(s);     // 16 bytes
Integer.decode(s);   // 18 bytes
Long.decode(s);      // 15 bytes
```
*new ABC*:
```
new Short(s);        // 13 bytes
new Integer(s);      // 15 bytes
new Long(s);         // 12 bytes
```
So, for code-golfing, it's best to use the constructor when converting a String to a numeric value.
The same applies to `Double`; `Float`; and `Byte`.
---
This doesn't always apply when you can re-use an already present primitive as object.  
As example, let's say we have the following code:
```
// NOTE: Pretty bad example, because changing the short to int would probably be shorter..
//       but it's just an example to get the point across
short f(short i,String s){
  short r=new Short(s);  // 21 bytes
  ... // Do something with both shorts
}
```
You can use `.decode` instead of the shorter constructor by re-using the parameter as object:
```
short f(Short i,String s){   // Note the short parameter has changed to Short here
  short r=i.decode(s);   // 20 bytes
  ... // Do something with both shorts
}
```
[Answer]
For golfing that doesn't require input, you can use static blocks, and run it just fine without any main method, just compile it with Java 6.
```
public class StaticExample{
    static {
        //do stuff
    }
}
```
[Answer]
We all know about the bitwise xor (`^`), but it is also a logical xor. 
So `(a||b)&&!(a&&b)` simply becomes `a^b`.
Now we can use xor.
[Additionally](https://codegolf.stackexchange.com/questions/6671/tips-for-golfing-in-java#comment56317_25950 "Thanks to Geobits"), the operators `|` and `&` [also work](http://ideone.com/rG4XIq), just remember that operator precedence changes.
[Answer]
# Don't be afraid to use scientific notation
If you are dealing with doubles, or floats, you can use scientific notation for numbers. So instead of writing `double a=1000` you can change it to `double a=1e3` to save 1 byte.
[Answer]
**Don't use `Random`!**
*In general,* if you need random numbers, [`Random`](http://docs.oracle.com/javase/8/docs/api/java/util/Random.html) is a horrible way to go about it\*. Much better to use [`Math.random()`](http://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#random--) instead. To use `Random`, you need to do this (let's say we need an `int`):
```
import java.util.*;
Random r=new Random();
a=r.nextInt(9);
b=r.nextInt(9);
```
Compare that to:
```
a=(int)(Math.random()*9);
b=(int)(Math.random()*9);
```
and:
```
int r(int m){return(int)(Math.random()*m);}
a=r(9);
b=r(9);
```
The first method takes `41+15n` characters (`n` is number of calls).
The second is `25n` characters, and the third is `43+7n`.
So, if you only need it once or twice, use the inline `Math.random()` method. For three or more calls, you'll save by using a function. Either one saves characters on the *first use* over `Random`.
---
If you're already using `Math.random()` for `double`, remember that at four uses, it's still a savings to pull it out into:
```
double r(){return Math.random();}
```
For 33 characters, you'll save 10 on each call to `r()`
---
**Update** 
If you need an integer and want to save on casting, *don't cast it!* Java auto-casts if you do an operation instead of an assignment. Compare:
```
a=(int)(Math.random()*9);
a=9;a*=Math.random();
```
\* *Unless you have to seed the PRNG for predictable results. Then, I don't see much of a way around it.*
[Answer]
# Try using `int` instead of `boolean`
In some cases I've found that it's shorter to return an integer value from a method that would normally return a boolean, similarly to what might be done in C programs.
Right off the bat `int` is 4 bytes shorter than `boolean`. Each time you write `return 0` instead of `return 1<0`, you save an additional 2 bytes and the same for `return 1` over `return 1>0`.
The pitfall here is that each time you want to use the return value directly as a boolean, it costs 2 bytes (`if(p(n))` v. `if(p(n)>0)`). This can be made up for by use of boolean arithmetic. Given a contrived scenario where you want to write
```
void a(int[]t){t[0]+=p(n)?10:0;}
```
you can instead write 
```
void a(int[]t){t[0]+=p(n)*10;}
```
in order to save 2 bytes.
[Answer]
If you use **enum instead of class**, you save one character. 
```
enum NoClass {
    F, G, H;    
    public static void main (String[] args) {
    }
}
```
But you have to introduce at least one enum instance (F, G, H in this example) which have to payoff themselves. 
[Answer]
I don't know if you would consider this 'pure' Java, but [Processing](http://www.processing.org) allows you to create programs with little initial setup (completed automatically).
For console output, you can have something as simple as:
```
println("hi"); //done
```
for graphical output, a little more:
```
void setup() {
  size(640,480);
}
void draw() {
  fill(255,0,0); //color used to fill shapes
  rect(50,50,25,25); //25x25 pixel square at x=50,y=50
}
```
[Answer]
## Shortening returning
You can shorten return statements of strings by a byte with:
```
return "something";
```
to
```
return"something";
```
And, if you happen to begin your return statement with a parenthesis, you can do the same thing with them:
```
return (1+taxRate)*value;
```
to
```
return(1+taxRate)*value;
```
I guess quotes are considered like parentheticals? I actually picked this up through AppleScript, funnily enough, and thought it might be worth mentioning.
[Answer]
# Use Java 10's `var`
If you define a single variable of a specific type, use `var`.
### Examples
```
var i=0;                        // int
var l=0L;                       // long
var s="";                       // String
var a=new int[]{1,2,3};         // int[]
var i=java.math.BigInteger.ONE; // BigInteger
var m=new java.util.HashMap();  // HashMap
var i=3+"abc".length()          // int
var a="a b c".split(" ");       // String[]
for(var a:"a b c".split(" "))   // String
```
### Not usable in any of the following examples
`var` cannot be used in many examples
```
var i=1,j=2;           // only one variable is accepted at a time
var a={1,2,3};         // arrays must be explicitly declared
var f=a->a+" ";        // can't know what type a is.
var f=String::replace; // method references aren't properly inferred (weirdly, though)
```
[Answer]
# Avoid `StringBuilder`s
Appending stuff to a `String` takes up much fewer bytes.
```
// s is a StringBuilder
s.append("Hello, World!");
// S is a String
S+="Hello, World!";
```
If you have to reverse a string and print it right away, use a `StringBuffer`.
```
System.out.print(new StringBuilder("Hello, World!").reverse());
System.out.print(new StringBuffer("Hello, World!").reverse()); // Note that you can omit toString() when printing a non-String object
```
If you have to reverse a string and then do something else than printing it, use a `for`each loop.
```
String b=new StringBuffer("Hello, World!").reverse().toString();
String B="";for(String c:"Hello, World!".split(""))B=c+B;
```
[Answer]
# Use `new Stack()` when you need basic `List` functionality
When you need a `java.util.List` (for example when you want to `.add(Object)`, `.remove(Object)`, `java.util.Collections.shuffle(java.util.Collection)`, etc.), I used to use `java.util.ArrayList` in most of my answers. But I was recently tipped to use `java.util.Vector` instead, and `java.util.Stack` is even shorter:
```
import java.util.*;
List a=new ArrayList();   // 23 bytes
List b=new Vector();      // 20 bytes
List c=new Stack();       // 19 bytes
```
[Answer]
# Shortest full program templates.
### Introduction
The [Java spec](https://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html) never ever say that a full program must contain a `main` method. It only says:
> 
> The Java Virtual Machine starts execution by invoking the method main of some specified class, passing it a single argument, which is an array of strings.
> 
> 
> 
So to the best of our efforts, we can define a Java program as something which when invoked in this way will provide an output:
```
$ javac A.java
$ java A
```
All the following templates do that.
### Java 8 (42 bytes)
```
interface A{static void main(String[]a){/* Your code here */}}
```
### Java 7 (45 bytes)
```
class A{public static void main(String[]a){/* Your code here */}}
```
### Java 5, 6 (12 or 27 bytes)
```
enum A{A;{/* Your code here */}}
```
This code above **will** write something on `stderr`. Usually something like `java.lang.NoSuchMethodError: main\nException in thread "main"`. If you can write on `stderr` after execution, use this!
```
enum A{A;{/* Your code here */System.exit(0);}}
```
This code above is longer (27 bytes), but it **will** execute your code **and** avoid writing anything on `stderr`.
### Conclusion
1. Don't ever use Java 7.
2. If your program can be written in Java 5 or 6, use it. If your program can be written in Java 5 or 6, but is longer than a Java 8 version, always check if it could be shorter to write it in Java 5 or 6.
[Answer]
When you have a method that should return a `boolean` or `Boolean`, i.e.:
```
// Return true if the (non-negative) input is dividable by 5
boolean c(int i){return i%5<1;}
```
You can change the `boolean`/`Boolean` return-type to `Object` to save 1 byte:
```
Object c(int i){return i%5<1;}
```
---
In addition, as you may have noticed, you can use a `<1` check instead of `==0` to save a byte. Although that is more a general code-golf tip instead of Java-specific.  
This is mostly used when the integer can't be negative, like checking for length:
```
a.length<1
```
instead of
```
a.length==0
```
[Answer]
# How to Draw in Java...
Here's the shortest possible GUI paint boiler-plate:
```
import java.awt.*;
static void main(String[]x){
    new Frame(){
        public void paint(Graphics g){
            // Draw your stuff here.
        }    
    }.show();
}
```
# Golfed for 111 Bytes:
```
import java.awt.*;static void main(String[]x){new Frame(){public void paint(Graphics g){/*CodeHere*/}}.show();}
```
[Answer]
Using Java Applet can save you a lot of space:
```
import java.applet.Applet;
public class B extends Applet{
    public B(){
        System.out.print("Hello world!");
    }
}
```
**Output:** 
> 
> Hello world!
> 
> 
> 
Also this can be even more shorten by making `B` to extends nothing.
```
public class B{
    public B(){
        System.out.print("Hello world!");
    }
}
```
How ever in additional to desired output we will also get exception:
**Output:** 
> 
> Hello world!  
> 
>  java.lang.ClassCastException: B cannot be cast to
>  java.applet.Applet  
> 
>  at sun.applet.AppletPanel.createApplet(Unknown Source)  
> 
>  at sun.applet.AppletPanel.runLoader(Unknown Source)  
> 
>  at sun.applet.AppletPanel.run(Unknown Source)  
> 
>  at java.lang.Thread.run(Unknown Source)
> 
> 
> 
Also you can combine this with constructor block and save another 10 bytes like this:
```
public class B{
    {
        System.out.println("Hello world!");
    }
}
```
Same output with exception as above.
]