返回信息流int a = 3;
int b = 3;
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。
这是一条镜像帖。来源:北邮人论坛 / java / #16555同步于 2010/11/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求解释,想知道下面说的对不
Scofieldbupt
2010/11/28镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这不太可能吧,呵呵
【 在 Scofieldbupt (哈杰) 的大作中提到: 】
: int a = 3;
: int b = 3;
: 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。
: ...................
基本类型应该不是这样处理的
如果是 String a = "3";
String b = "3";
这样的话是像楼主所说,指向栈里同一个字符串
【 在 Scofieldbupt (哈杰) 的大作中提到: 】
: int a = 3;
: int b = 3;
: 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。
: ...................
【 在 jianjianjiao 的大作中提到: 】
: 应该不对,java 对基本类型是值存储的,不是引用。a、b会有占有两个int大小的空间,同时存着值3。
3q
如果是 String a = "3";
String b = "3";
这个能理解,a,b都是引用,但是java中的基本类型不知道是怎么处理的,是不是调用函数的时候就为这些基本类型在栈中已经分配了空间,像c/c++那样分配的
这样很费劲吧,还得去找有不有这个值,也就 4 个字节的事情
如果 int a = 3; int b = a; 那这样可以指向同一个对象,在修改 a 或 b 的时候再分裂出来
【 在 Scofieldbupt (哈杰) 的大作中提到: 】
: int a = 3;
: int b = 3;
: 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。
: ...................
基本类型的变量直接存储在栈中,常量存储在特定的常量池中
【 在 yueyingcs 的大作中提到: 】
: 这个说法是对的,先在栈中建立常量,然后为基本类型建立常量引用
: --