请问:
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,引用变量赋给引用变量,是不是把内存地址给赋予了 如: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标记的变量赋值,赋不同的值可以吗 为什么呢
谢谢
问题2:f 表示float的f初始化的时候用的,d表示double的d, e表示10为底
问题3:final声明的变量不可以赋不同值,因为final声明的变量表示常量,不能更改,这是规定
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) { }
}
例子:如TEST是一个类
TEST test1=new TEST();
TEST test2=test1;
这样的test1, test2实际上是指向同一个内存空间的改变test2也就改变了test1
但是
int number1=13;
int number2=number1;
这样的话 如果 有 number2=16;
number1的值是不会改变的
后面两个问题受教老紫竹 感谢
引用类型涉及到深复制和浅复制的问题,说简单一点:
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;
}
}
2 2e3f 表示 2*10^3 结果为float类型 也就是说f代表float,如果要是d就代表double,相应l代表long等等
3 可以,但只能赋值一次,赋值之后不能再改变
int i=3; int j ; j = i ; 赋的是值!~ 引用赋的是指向!~ 所以也赋的是地址和值的全部!~! 但是栈中的地址不能重复! ~所以在栈中地址不是相同的!~~~~