MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java知识点

Posted on 2011-03-13 23:38 leekiang 阅读(293) 评论(0)  编辑  收藏 所属分类: java
1,double d = 1 / 4;System.out.println(d);//输出为0

2,    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("a");
        StringBuffer b = new StringBuffer("b");
        append(a, b);
        System.out.println(a.toString() + "," + b.toString());//输出为"ab,a"
    }

    public static void append(StringBuffer a, StringBuffer b) {
        a.append(b);
        b = a;
    }
   解释:由于java方法传值是值传递,所以方法里面的a,b虽然和方法外的a,b指向的对象一样,但是这两个引用在栈中的位置不一样。
过程大概是首先在栈中复制引用a为a',b为b',并令a'指向a所指的在堆中的StringBuffer对象,b'指向b所指的在堆中的StringBuffer对象。
因此方法中的b=a只是起到了b'=a'的作用,并没有影响方法外b的指向。
        其实public static void append(StringBuffer a, StringBuffer b)中的变量a,b只是main方法中的变量a,b的引用地址副本,也就是说相当于append中的a与main中的a是指向同一个地址,append中 的b与main中的b是指向同一个地址,所以a.append(b)操作影响到了main方法中的a,但是append方法中的b=a;操作只是改变了 append方法的中b的指向,并没有改变main方法中b的指向。
        java是按值传递,对象类型的话,分为栈上的引用和堆上的对象,栈上的引用被复制一份,如果操作堆上的对象则对象改变,但是如果操作引用则不改变
        java方法的参数传递有两种规则:(1)按值传递(by value) ,八种基本数据类型和String  (2)按址传递(by address) ,除String以外的所有复合数据类型,包括数组、类和接口

3,如果使用switch,那么每一个case和default里都要加break

Java容易搞错的知识点

只有注册用户登录后才能发表评论。


网站导航: