Thinking in java-15 传值机制&&关系问题

来源:互联网 发布:python 模仿浏览器 编辑:程序博客网 时间:2024/06/18 05:06

1.Passs by value–值传递

package fqy.iss.thinking.operator;public class PassObject{    static void f(Letter l)    {        l.c = 'z';    }    public static void main(String[] args)    {        Letter l1 = new Letter();        l1.c = 'a';        System.out.println(l1.c);        f(l1);        System.out.println(l1.c);    }}class Letter{    char c;}//resultaz   

Java中,函数传值方式是Pass-by-value 的方式进行的。传递给方法形参的只是变量的一份复制。上述例子中传递了一份对象的引用,函数作用域引用的值,所以结果是改变了引用对象的值(和C中的指针机制很像)。

2.== 与 equal()方法

这里有相关问题的Q&A.
举例:

public final class MyEqualityTest{    public static void main( String args[] )    {        String s1 = new String( "Test" );        String s2 = new String( "Test" );        System.out.println( "\n1 - PRIMITIVES ");        System.out.println( s1 == s2 ); // false        System.out.println( s1.equals( s2 )); // true        A a1 = new A();        A a2 = new A();        System.out.println( "\n2 - OBJECT TYPES / STATIC VARIABLE" );        System.out.println( a1 == a2 ); // false        System.out.println( a1.s == a2.s ); // true        System.out.println( a1.s.equals( a2.s ) ); // true        B b1 = new B();        B b2 = new B();        System.out.println( "\n3 - OBJECT TYPES / NON-STATIC VARIABLE" );        System.out.println( b1 == b2 ); // false        System.out.println( b1.getS() == b2.getS() ); // false        System.out.println( b1.getS().equals( b2.getS() ) ); // true    }}final class A{    // static    public static String s;    A()    {        this.s = new String( "aTest" );    }}final class B{    private String s;    B()    {        this.s = new String( "aTest" );    }    public String getS()    {        return s;    }}
  1. ==,将产生的是boolean类型的比较结果;
  2. equal()是所有对象都存在的方法。
    一般可以认为:
    ‘==’是数据内存地址的比较;
    而 equal()是对象内容的比较。