标签:
1、一个小程序,关于Java值传递和引用传递的:
package com.lk.B; public class Test1 { public static void main(String[] args) { // TODO Auto-generated method stub Test1 t = new Test1(); t.first(); } public void first(){ int i = 5; Value v = new Value(); v.i = 25; second(v,i); System.out.println(v.i); } public void second(Value v , int i){ i = 0; v.i = 20; Value val = new Value(); v = val; System.out.println(v.i+" "+i); } } class Value{ public int i = 15; }
2、RandomAccellFile是比较不寻常的类,它直接继承与Object,它并不属于Streams结构的一部分。
3、Java编程思想里面有个关于值传递和引用传递的经典的解释:如果Java是传值,那么传递的是值的副本;如果Java是传引用,那么传递时引用的副本。
即不管Java参数的类型是什么,一律传递参数的副本。
下面有三个例子:
package com.lk.B; public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub boolean test = true; System.out.println(test); test(test); System.out.println(test); } public static void test(boolean test){ test = !test; System.out.println(test); } }
true false true
package com.lk.B; public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub StringBuffer sb = new StringBuffer("Hello"); System.out.println(sb); test(sb); System.out.println(sb); } public static void test(StringBuffer sb){ sb.append(",World!"); } }
Hello
Hello,World!
package com.lk.B; public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub String s = "Hello"; System.out.println(s); test(s); System.out.println(s); } public static void test(String s){ s = "World"; } }
Hello
Hello
对于String类型,String类是final的,因此,不能继承和修改这个类。是s = “World”是隐含地让Java生成一个新的String对象。既然对象都是新的,那就和原来的“Hello”没有任何关系。当函数结束,s作用消失,原来的内存地址上的内容未加改变,所以打印的结果仍然是Hello。
4、当读取的问价是一个比较大的文本文件(很多字节数的文本文件),那么就要考虑到BufferedReader这个类。
new BufferedReader(new InputStreamReader(new FileInputStream("file.name")));
5、一个字符串写入文件的例子:
package com.lk.B; import java.io.FileOutputStream; import java.io.IOException; public class Test2 { public static void main(String[] args) { // TODO Auto-generated method stub FileOutputStream fos = null; try { fos = new FileOutputStream("FileName.txt"); fos.write("字符串写入文件".getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
6、看到一个判断是一个数是不是2的阶次方数。
一个非常机智的算法:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干个0.比如8就是1000,64就是1000000.如果将这个数减1,再与该数做和(&)运算,则应该全为0.(例如:8与7,一个二进制数是1000,一个二进制数是111,它们做和运算后全为0)。所以((d-1)&d)==0。
package com.lk.B; public class Test3 { public static void main(String[] args) { // TODO Auto-generated method stub int a = 256;//2,4,8,16,32,64,128,256... System.out.println((a-1)&a);//输出0 } }
标签:
原文地址:http://www.cnblogs.com/luankun0214/p/4416198.html