没看懂,本类之外有直接访问strings了吗?难道能直接访问?

解决方案 »

  1.   

    private本身就使实例变量和成员函数只能在本类里调用了,不可以吗
      

  2.   

    String[] tmp = test.getStrings();
    tmp[0] = "modified";
    这里的tmp并不是类的成员变量啊,只是个变量并赋了个值而已!
    test.strings才是成员变量
      

  3.   

    return 返回的好像是一个string 的引用,故而不能把保护,是吗?
      

  4.   

    javaTest test = new javaTest();
    String[] tmp=test.getStrings();
    类对象test通过getStrings()方法可以得到strings (String[] tmp=test.getStrings();)
    通过tmp[0] = "modified";并不能改变strings, 
      

  5.   

    public class javaTest {
    private String[] strings; public javaTest(){
    strings = new String [1];
    strings[0] = "string";
    } public String[] getStrings(){
    return strings;
    } public void showStrings(){
    System.out.println( strings[0] );
    }
    static public void main( String[] args ) {
    javaTest test = new javaTest();
    test.showStrings();
    String[] tmp = test.getStrings();
    tmp[0] = "modified";
    test.showStrings();
    String[] aaa = {"aaaa","bbbb"};
    tmp = aaa;
    test.showStrings();
    }
    }
    结果:
    stringmodifiedmodified
    private对于对象来说,只能是保证不改变它的指向,对象内部内容能够被改变。
      

  6.   

    不是return前new,就是return后new了。
     String[] tmp = test.getStrings();
    使得tmp和strings指向同一个实例,所以可以改变strings的值。
    但这是通过javaTest的方法实现的,也就是你主动交出了权限,
    private也保护不了你了。
      

  7.   

    在最后加上:System.out.println(test.strings);
               System.out.println(test.strings[0]);
    结果:
                  [Ljava.lang.String;@ad3ba4
                  modified
    说明test的成员变量strings确实被修改了,Why????????
      

  8.   

    对呀,当然有权限了,如果不是test.getStrings();
    而是test.strings你就改不了strings的值了,这时private就
    起作用了。
      

  9.   

    方法 getStrings 返回的是私有成员 strings 的引用 ,这样 tmp 被赋予该引用,所以对tmp成员的赋值等同于对strings的重新赋值。tmp = aaa;该语句使得tmp的引用再一次发生变化,指向了aaa地址,所以此时strings 的内容不变,还是modified。