几个java小问题 请高手帮忙解决

wangbo1204 2008-02-15 06:07:25
请问:
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标记的变量赋值,赋不同的值可以吗 为什么呢
谢谢
...全文
229 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuqiupeng 2008-02-17
  • 打赏
  • 举报
回复
java虚拟机的体系结构并非冯诺依曼结构,而是典型的堆栈式结构,对象放置在堆中,其他类型放置在栈中,了解虚拟机的体系结构是学习java的基本,其实java对学生是有害的
wuxo84 2008-02-17
  • 打赏
  • 举报
回复
1 如果是对象的话,引用那个对象指得就是“引用”它的地址,其实就是指向它的意思;但基本类型相互引用时相当于把值传递过去了,注意String是对象(引用)类型 不是 基本类型
2 2e3f 表示 2*10^3 结果为float类型 也就是说f代表float,如果要是d就代表double,相应l代表long等等
3 可以,但只能赋值一次,赋值之后不能再改变
bxdg42578670 2008-02-17
  • 打赏
  • 举报
回复


1. 首先栈中地址建立了之后是唯一的!~ 除非销毁了!~ 所以在栈中赋的是值!~
int i=3; int j ; j = i ; 赋的是值!~

引用赋的是指向!~ 所以也赋的是地址和值的全部!~! 但是栈中的地址不能重复! ~

所以在栈中地址不是相同的!~~~~



rain_night 2008-02-16
  • 打赏
  • 举报
回复
对于楼上讲解是没有错误的;但不完整
引用类型涉及到深复制和浅复制的问题,说简单一点:
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;
}
}
laidor 2008-02-16
  • 打赏
  • 举报
回复
对于第一个问题 在我看过的一本书中是这样描述的:数字变量存储数字,对象变量存储引用 (对象引用描述的是对象的地址)
例子:如TEST是一个类
TEST test1=new TEST();
TEST test2=test1;
这样的test1, test2实际上是指向同一个内存空间的改变test2也就改变了test1
但是
int number1=13;
int number2=number1;
这样的话 如果 有 number2=16;
number1的值是不会改变的
后面两个问题受教老紫竹 感谢
rain_night 2008-02-15
  • 打赏
  • 举报
回复
看了老紫竹的分析,收获良多!继续关注中
老紫竹 2008-02-15
  • 打赏
  • 举报
回复
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) {

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

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧