请问:
1,引用变量赋给引用变量,是不是把内存地址给赋予了 如:string s; string m ; s=m  int i=3;int j; i=j 
   中是不是把m的内存地址给了s,而只是把i的值赋给了j呢?
2,java中单精度,双精度中的f,d,e是什么意思呢 如2e3f
3,在多个构造函数中对final标记的变量赋值,赋不同的值可以吗 为什么呢
谢谢

解决方案 »

  1.   

    问题1:m赋值的是引用,i不是很清楚,应该是赋值的值吧(关注学习中);
    问题2:f 表示float的f初始化的时候用的,d表示double的d,  e表示10为底
    问题3:final声明的变量不可以赋不同值,因为final声明的变量表示常量,不能更改,这是规定
      

  2.   

    1 对象是把其指向的对象的地址传过去,数字是新建一个数值而已
    2 2e3f = 2*10^3 结果为float类型
    3 可以的,前提是声名的时候不能赋值,且不能再调用其它构造器
    class Test {
      private final int id;  Test() {
        id = 1;
      }  Test(int id) {
      // this(); // 这样是不行的哦
        this.id = id;
      }  public static void main(String[] args) {  }
    }
      

  3.   

    对于第一个问题 在我看过的一本书中是这样描述的:数字变量存储数字,对象变量存储引用 (对象引用描述的是对象的地址)
    例子:如TEST是一个类
         TEST test1=new TEST();
         TEST test2=test1;
    这样的test1,  test2实际上是指向同一个内存空间的改变test2也就改变了test1
    但是    
           int number1=13;
          int number2=number1;
    这样的话  如果 有    number2=16;
    number1的值是不会改变的
    后面两个问题受教老紫竹   感谢
      

  4.   

    对于楼上讲解是没有错误的;但不完整
    引用类型涉及到深复制和浅复制的问题,说简单一点:
      1  浅复制副本和正本都指向复制出来的引用对象      (这里改变1个对象的引用内容,就会改变另一个对象的引用)
      2  深复制副本和正本指向2个相等,但内存空间不相等的引用对象  (这里改变1个对象的引用内容,
                                                                     而不会改变另一个对象的引用)
    以下附上我的代码:
    package clone;public class CloneTest {
    public static void main(String[] args) {
    Clone c=new Clone();
    c.setStr("1");
    Clone c1;
    try {
    c1 = (Clone)c.clone();
    System.out.println("深复制 "+c+"\t"+c1);
    c1.setStr("2"); //改变了一个对象
    System.out.println("深复制 "+c+"\t"+c1);//深复制另一个没改变
    } catch (CloneNotSupportedException e) {
    e.printStackTrace();
    } Check check=new Check();
    check.setStr("1");
    Check check2=check;
    System.out.println("浅复制 "+check2+"\t"+check);
    check2.setStr("2");       ////改变了一个对象
    System.out.println("浅复制 "+check2+"\t"+check);//深复制另一个改变了
    }
    }
    //深复制对象
    class Clone implements Cloneable{
    public String str="";
    public String getStr() {
    return str;
    }
    public void setStr(String str) {
    this.str = str;
    }
    protected Object clone() throws CloneNotSupportedException {
    Clone c=(Clone)super.clone();
    return c;
    }
    public String toString() {
    return this.str;
    }
    }
    //浅复制对象
    class Check{
    String str=""; public String getStr() {
    return str;
    } public void setStr(String str) {
    this.str = str;
    }
    public String toString() {
    return this.str;
    }
    }
      

  5.   

    1 如果是对象的话,引用那个对象指得就是“引用”它的地址,其实就是指向它的意思;但基本类型相互引用时相当于把值传递过去了,注意String是对象(引用)类型 不是 基本类型
    2 2e3f 表示 2*10^3 结果为float类型 也就是说f代表float,如果要是d就代表double,相应l代表long等等
    3 可以,但只能赋值一次,赋值之后不能再改变 
      

  6.   

    1.  首先栈中地址建立了之后是唯一的!~  除非销毁了!~ 所以在栈中赋的是值!~
    int i=3; int j ;  j = i ;   赋的是值!~ 引用赋的是指向!~ 所以也赋的是地址和值的全部!~!  但是栈中的地址不能重复! ~所以在栈中地址不是相同的!~~~~
      

  7.   

    java虚拟机的体系结构并非冯诺依曼结构,而是典型的堆栈式结构,对象放置在堆中,其他类型放置在栈中,了解虚拟机的体系结构是学习java的基本,其实java对学生是有害的