在知乎上看到一回答

public static void main(String ... args) {
	    System.out.println(randomString(-229985452)+' '+randomString(-147909649));
	}
	public static String randomString(int seed) {
	    Random rand = new Random(seed);
	    StringBuilder sb = new StringBuilder();
	    for(int i=0;;i++) {
	        int n = rand.nextInt(27);
	        if (n == 0) break;
	        sb.append((char) ('`' + n));
	    }
	    return sb.toString();
	}

跑了一下。。。麻辣个鸡的。。。

作者:jason christ
链接:https://www.zhihu.com/question/37760140/answer/74523291
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

想起了1+1=3的那个
代码大概是这个样子…
—————————————-

public static void main(String[] args) throws Exception {
		Class integer = Integer.class.getDeclaredClasses()[0];
		Field field = integer.getDeclaredField("cache");
		field.setAccessible(true);
		Integer[] array =  (Integer[]) field.get(integer);
		array[130] = array[131];
		System.out.printf("%d", 1 + 1);
}

———————————————————————————————-
解解释一下,前面几步是反射就不说了,java里面有一个int常量池,也就是field.get(integer);这句代码所拿到的,它的长度是256,里面存着[-128-127]之间的数字.这个有什么用?看了下面的代码你就会理解了

                Integer a = -128;
		Integer b = -128;
		Integer c = -129;
		Integer d = -129;
		System.out.println(a == b);
//true
		System.out.println(c == d);//false

然后,System.out.printf这个方法并没有做验证,而是如果值在这个范围就直接从池中拿出来.
也就是说,如果我这样写

                for (int i = 0; i < array.length; i++) {
			array[i] = 12450;
		}
		for (int i = -128; i <= 127; i++) {
			System.out.printf("%d\n", i);
		}

输出的将都会是12450.
println就不会用这个问题,因为它用的是String.valueOf(i).


1 关于Integer int
Integer t1 = 111;
Integer t2 = 111;
Integer t3 = new Integer(111);
Integer t4 = Integer.valueOf(111);
Integer s1 = 222;
Integer s2 = 222;
Integer s3 = new Integer(222);
Integer s4 = Integer.valueOf(222);
System.out.println(t1 == t2); //true
System.out.println(t1 == t3); //false
System.out.println(t1 == t4); //true
System.out.println(s1 == s2); //false
System.out.println(s1 == s3); //false
System.out.println(s1 == s4); //false

2 String
String a = "JAVA";
String b = "JAVA";
String c = new String("JAVA");
String d = "JA";
String e = "VA";
String f = "JA"+"VA";
String g = d+e;
String h = c ;
System.out.println(a==b); //true
System.out.println(a==c); //false
System.out.println(a==f); //true
System.out.println(a==g); //false
System.out.println(c==f); //false
System.out.println(c==g); //false
System.out.println(c==h); //true
3.数组,=
int a=0;
int b[]=new int[5];
int c=3;
b[a]=a=c;
System.out.println(b[0] + " " + b[3]); //3 0
4 static
static {
name = "B";
}
static String name = "A";
static {
System.out.println(name); //A
}
输出的name 是什么呢?
5.short
short a = 1;
a = a ++;//会报错吗? 不会
short a = 1;
a = a + 1;//会报错吗? 会
short a = 1;
a += 1;// 会报错吗? 不会

原地址http://user.qzone.qq.com/243404061/2