java中String类得变量在用print()输出String对象储存的字符串,他是如何实现这一输出的?例如 String     S1 =   “Hello”;System.out.print(S1),输出  :Hello,它是如何实现得?,自定义String类这一功能如何实现?如何实现 subString(),在输出时不是自己定义对象得引用?Java String

解决方案 »

  1.   

    是System.out实现了输出,而不是String,想知道怎样实现需要看源码,jdk目录下的src.zip
    String的内部是一个字符数组,所以可以用索引值实现substring
      

  2.   

    out 是OutputStream 他的print方法打印对象的时候.print(Object o).
    首先是调用String.valueOf(o)转化成bytes再打印。具体看APIpublic void print(Object obj)
    Prints an object. The string produced by the String.valueOf(Object) method is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
    Parameters:
    obj - The Object to be printed
    See Also:
    Object.toString()
      

  3.   

    就是我自己定义String类时 ,对自己定义得类对象进行打印输出,但输出的是对象得引用,那些对类得操作函数返回对象在打印时也是引用就是我自己定义String类时 ,对自己定义得类对象进行打印输出,但输出的是对象得引用,那些对类得操作函数返回对象在打印时也是引用
      

  4.   

    就是我自己定义String类时 ,对自己定义得类对象进行打印输出,但输出的是对象得引用,那些对类得操作函数返回对象在打印时也是引用
      

  5.   

    就是我自己定义String类时 ,对自己定义得类对象进行打印输出,但输出的是对象得引用,那些对类得操作函数返回对象在打印时也是引用
      

  6.   

    String重写了Object的toString方法,System.out.print(S1)时,调用toString方法,打印出String的值。否则打印的是一串地址。
      

  7.   

    就是我自己定义String类时 ,对自己定义得类对象进行打印输出,但输出的是对象得引用,那些对类得操作函数返回对象在打印时也是引用
      

  8.   


    你把那个 toString 方法重新写一遍
      

  9.   

    下面写了个实例,不知道能不能满足你的要求。你应该可以看懂
    public class TestString { /**
     * <pre>
     * @author kanpiaoxue
     * Date 2013-11-14
     * 当前类没有重写Object的 public String toString() 
     * 这样,在打印该实例的引用的时候,会调用 Object 的 toString() 方法。
     * 
     *  下面的这个 toString() 是JDK中Object类的方法。可以看见它的组成是由“类名 + hashCode”组成的。
     *  public String toString() {
     *  return getClass().getName() + "@" + Integer.toHexString(hashCode());
     *  }
     * </pre>
     */
    class WithoutToString {
    protected String name;
    protected int age; public WithoutToString(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    } } /**
     * <pre>
     * @author kanpiaoxue
     * Date 2013-11-14
     * 当前类重写了 Object的 public String toString()
     * 在打印该实例的引用的时候,因为这里重写了 Object的 public String toString(),所以就调用当前类的 public String toString()方法。
     * </pre>
     */
    class WithToString extends WithoutToString {
    public WithToString(String name, int age) {
    super(name, age);
    } @Override
    public String toString() {
    return "WithToString [name=" + name + ", age=" + age + "]";
    }
    } /**
     * @param args
     */
    public static void main(String[] args) {
    TestString test = new TestString();
    String name = "kanpiaoxue";
    int age = 200;
    WithoutToString a = test.new WithoutToString(name, age);
    System.out.println(a); WithToString b = test.new WithToString(name, age);
    System.out.println(b);
    // -------- output ------------
    //com.wanmei.test.TestString$WithoutToString@2a9931f5
    //WithToString [name=kanpiaoxue, age=200]
    }}
      

  10.   

    在你自己定义的类中重写toString()方法 
    这样你打印出来的就是你重写的toString()方法的返回值了