java的基础数据类型有:(byte、short、int、long、float、double、char、boolean)八种

基础数据都是值传递,其他都是引用传递。但是引用传递要特别注意:String Integer Double等这几个类型,以下以String为例。

举例说明:

public static void main(String[] args) {
String a="zkj";
System.out.println("str :");
strTest(a);
System.out.println("str :");
}  
  public static void strTest(String b){ //这里b的地址指向main方法中a的地址
b="hello,"+b; //这里虽然也是引用传递,但是这里等于是新建了对象,并把地址指向这里的b
System.out.println(b);
}

打印:

str : zkj

str : zkj

这里String是引用传递,但是调用strTest方法后,执行:

b="hello,"+b;  

看似改变了传入的参数,但是其实是由于新建了一个string对象,所以内存中存在a:zkj,b:hello zkj,两个地址,所以这时候a的值还是 不变的。

其他的情况:
public class Main {

    public static void main(String[] args) {

        String a="zkj";
System.out.println("str :");
strTest(a);
System.out.println("str :"); StringBuffer sb=new StringBuffer("zkj,");
objTest(sb);
System.out.println("obj :"+sb.toString()); final StringBuffer s=new StringBuffer("aa");
System.out.println(s);
s.append("bb");
System.out.println(s); } public static void strTest(String b){ //这里b的地址指向main方法中a的地址
b="hello,"+b; //这里虽然也是引用传递,但是这里等于是新建了对象,并把地址指向这里的b
System.out.println(b);
} public static void objTest(StringBuffer a){
a.append("hahah");
System.out.println(a.toString());
} }

 这里打印:

zkj,hahah 

新增了一个StringBuffer对象sb,学习过jvm的就了解,这里会在栈中生成一个sb,堆中生成一个“zkj,”对象,sb引用这个堆中的地址。调用ojbTest方法后,sb新增了字符串hahah,堆中的sb对象增加了这个string.
那什么时候可以像上例中String赋值一样,sb的值保持不变呢?
很简单,类似上例,我们也新建一个对象。 在ojbTest中。
 public  static void objTest(StringBuffer a){
a=new StringBuffer();
a.append("hahah");
System.out.println(a.toString());
}

  这样main中就会打印:  zkj,

解释如同上例。


 

最新文章

  1. vmware rdm
  2. linux 下链接无线网络
  3. 转:fatal error: SDL/SDL.h: No such file or directory
  4. MAT(Memory Analyzer Tool)工具入门介绍
  5. 使用Html5+C#+微信 开发移动端游戏详细教程:(六)游戏界面布局与性能优化
  6. APP_Store - 怎样为iOS8应用制作预览视频
  7. stm32中.bss和.data段是在哪里初始化的
  8. Linux调整SWAP分区
  9. codevs2034 01串2
  10. Java Des加解密方法(c#加密Java解密)
  11. Java设计模式之《桥接模式》及应用场景
  12. L1正则化比L2正则化更易获得稀疏解的原因
  13. 【转】C Runtime Library的来历
  14. mysql-sql语言参考
  15. Jnlp
  16. top k问题
  17. 20155206 2016-2017-2 《Java程序设计》第7周学习总结
  18. ProGuard代码混淆详细攻略
  19. Android——菜单和进度条
  20. json包的不同导致结果不同

热门文章

  1. git---gui使用
  2. 关于RelativeLayout设置垂直居中对齐不起作用的问题
  3. MVC6学习教程
  4. 43、gridview或者listview的adapter优化
  5. LeetCode——Problem3:Longest Substring Without Repeating Characters
  6. sqlserver操作各种文件方法
  7. csapp读书笔记-并发编程
  8. jquery版tab切换效果
  9. 生产环境下yum的配置
  10. 【bzoj3280】小R的烦恼 费用流