java只有值传递,传递的是存储在栈中的值,对基本数据类型,传递的 是本身,对对象类型,因为栈中存储的是对象的引用,真正的对象是存储在堆里的,所以传递的其实是对象的引用。
值传递的例子
引用传递的例子
TreeMap的用法,自动排序
值传递的例子
package parameterpass;
import java.util.ArrayList;
public class ValuePass {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
StackTraceElement e[] = Thread.currentThread().getStackTrace();
for (int i = 0; i < e.length; i++) {
System.out.println("线程"+e[i]);
}
System.out.println(Thread.getAllStackTraces()); //打印出所有线程
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(0, 78); //装箱
int b = arr.get(0); //拆箱
System.out.println("b=" + b);
int a = 0;
new ValuePass().test(a);
System.out.println("a=" + a); // a=0
}
private void test(int b) {
b = 1;
}
}
引用传递的例子
package parameterpass;
import cloneObject.Student;
public class ReferencePass//引用传递,java只有值传递,值存储在栈里,对基本类型,存值,引用类型存放地址
{
public static void main(String[] args)
{
Student student=new Student();
student.id="0001";
student.name="Tom";
new ReferencePass().test(student);
System.out.println("student.id="+student.id); //student.id=0002
System.out.println("student.name="+student.name); //student.name=Jike
}
private void test(Student student)
{
student.id="0002";
student.name="Jike";
}
}
TreeMap的用法,自动排序
package mapTest;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Set;
//SortedMap是接口,可以使map自动排序,TreeMap是其实现类
public class TestTreeMap
{
public static void main(String[] args)
{
SortedMap<String,String> map=new TreeMap<String,String>();
//插入键值对
map.put("bkey","bvalue");
map.put("dkey","dvalue");
map.put("ckey","cvalue");
map.put("akey","avalue");
//获取键值Set
Set<String> keySet=map.keySet();
//将键值Set转成数组
Object[] keyArray=keySet.toArray();
//按照键值依序获取值对象
for(int i=0; i<keyArray.length; i++)
System.out.println( "key="+(String)keyArray[i]+"; value="+map.get((String)keyArray[i]) );
}
}
package mapTest;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
//LinkedHashMap保持插入元素的顺序,map不能保证键值对的顺序与插入的顺序一致
public class TestLinkedMap
{
public static void main(String[] args)
{
LinkedHashMap<String, String> map=new LinkedHashMap<String, String>();
//插入键值对
map.put("akey","avalue");
map.put("bkey","bvalue");
map.put("ckey","cvalue");
map.put("dkey","dvalue");
//获取键值Set
Set<String> keySet=map.keySet();
//将键值Set转成数组
Object[] keyArray=keySet.toArray();
//按照键值依序获取值对象
for(int i=0; i<keyArray.length; i++)
System.out.println( "key="+(String)keyArray[i]+"; value="+map.get((String)keyArray[i]) );
// 结果:
// key=akey; value=avalue
// key=bkey; value=bvalue
// key=ckey; value=cvalue
// key=dkey; value=dvalue
// 一般的map
// Map<String, String> map=new HashMap<String, String>();
// //插入键值对
// map.put("akey","avalue");
// map.put("bkey","bvalue");
// map.put("ckey","cvalue");
// map.put("dkey","dvalue");
//
// //获取键值Set
// Set<String> keySet=map.keySet();
// //将键值Set转成数组
// Object[] keyArray=keySet.toArray();
// //按照键值依序获取值对象
// for(int i=0; i<keyArray.length; i++)
// System.out.println( "key="+(String)keyArray[i]+"; value="+map.get((String)keyArray[i]) );
// 结果:顺序不一定
// key=dkey; value=dvalue
// key=ckey; value=cvalue
// key=akey; value=avalue
// key=bkey; value=bvalue
}
}