el表达式定义变量赋值,不赋值,会为变量分配内存空间吗

51CTO旗下网站
变量的定义与赋值(1)
《PHP开发入行真功夫》第2章基本语法,本章介绍PHP语言的基础语法,包括PHP的变量和常量、数据类型、类型间的转换、表达式和运算符、流程控制语句和包含语句。本节为大家介绍变量的定义与赋值。
作者:三扬科技来源:电子工业出版社| 16:21
2.3& PHP的变量和常量
视频精讲:光盘\video\baseVideo\02\PHP的变量和常量.swf
几乎所有的编程语言都会涉及变量和常量这两个概念,PHP也不例外。本节我们将介绍PHP语言中变量和常量的应用方法。
2.3.1& 变量的定义与赋值(1)
变量用于存储临时数据信息。某一变量被定义的时候,系统会自动为该变量分配一个存储空间存放变量的值。我们可以在定义变量的时候对其赋值,如果需要改动变量的值,则只需再次对其进行赋值即可。那些临时的数据信息或者处理过程,也可以存放在变量中。
下面我们将介绍如何在PHP中实现变量的定义与赋值操作。
1.变量的定义
在PHP中定义一个变量的格式为美元符号($)加变量名称。在为一个变量命名时需要遵循以下命名规则。
变量名以字母或下画线开头,可以由字母、下画线和数字构成。
变量名区分大小写,"$var"和"$VAR"代表两个不同的变量。
自定义变量名称不可与PHP提供的默认变量名称相同。
在为变量命名时,尽量使用有意义的字符串。
符合规定的变量命名如下。01&&$name; &02&&$_password; &03&&$no1;&
不符合规定的变量命名如下。01&&$1book; &02&&$*a;&
2.变量的赋值
为变量赋值有两种方式:传值赋值和引用赋值,这两种赋值方式在对数据的处理上存在很大差别。
1)传值赋值
这种赋值方式使用"="直接将一个变量(或表达式)的值赋给变量。使用这种赋值方式,等号两边的变量值互不影响,任何一个变量值的变化都不会影响到另一个变量。从根本上讲,传值赋值是通过在存储区域复制一个变量的副本来实现的。应用传值赋值的示例代码如下。
【程序2 4】光盘\code\02\var\chuanzhi.php01&&&html& &02&&&head& &03&&&title&传值赋值方式&/title& &04&&&/head& &05&&&body& &06&&&?php &07&&&&&&$a&=&33; &08&&&&&&$b&=&$a; &09&&&&&&$b&=&44; &10&&&&&&echo&"变量a的值为".$a."&br&"; &11&&&&&&echo&"变量b的值为".$b; &12&&?& &13&&&/body& &14&&&/html&&&
在上面的代码中,执行"$a = 33"语句时,系统会在内存中为变量a开辟一个存储空间,并将"33"这个数值存储到该存储空间。实现过程如图2-6所示。
执行"$b = $a"语句时,系统会在内存中为变量b开辟一个存储空间,并将变量a所指向的存储空间的内容复制到变量b所指向的存储空间。实现过程如图2-7所示。
图2-6& 开辟变量a的存储空间
图2-7& 开辟变量b的存储空间
执行"$b = 44"语句时,系统将变量b所指向的存储空间保存的值更改为"44",而变量a所指向的存储空间保存的值仍然是"33"。实现过程如图2-8所示。
程序2-4被执行后的结果如图2-9所示。
图2-8& 更改变量b的值
图2-9& 传值赋值方式
【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:30860人学习过
讲师:161442人学习过
讲师:91985人学习过
精选博文论坛热帖下载排行
本书详细介绍了AJAX在Web开发上的应用。主要内容包括:ASP.NET AJAX技术概述、实现异步局部更新页面、UpdatePanel编程功能、PageRequestMan...
订阅51CTO邮刊Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?_百度知道
Java程序运行时,没有赋值的基本类型变量会在内存中分配空间吗?
比如“”,a在栈中会占用空间吗?我现在的理解是:JVM会在内存中(可能是栈,或者其他内存区域)中开辟一个空间(可能是32bit,可能是64bit)。a这个符号在JVM中就被映射成这快空间的地址,暂且称这块空间为x。而x这块空间存储的其实是另外一块内存空间...
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括:
1)用来保存基本数据类型的值;
2)保存类的实例,即堆区对象的引用(指针)
3)也可以用来保存加载方法时的帧3、堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。4、常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、字段的符号引用(1)。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中。5、代码段:用来存放从硬盘上读取的源程序代码。6、数据段:用来存放static定义的静态成员。注意: 1.一个Java文件,只要有main入口方法,我们就认为这是一个Java程序,可以单独编译运行。 2.无论是普通类型的变量还是引用类型的变量(俗称实例),都可以作为局部变量,他们都可以出现在栈中。只不过普通类型的变量在栈中直接保存它所对应的值,而引用类型的变量保存的是一个指向堆区的指针,通过这个指针,就可以找到这个实例在堆区对应的对象。因此,普通类型变量只在栈区占用一块内存,而引用类型变量要在栈区和堆区各占一块内存。
IT行业金牌讲师
由于是int型,也就是说是局部变量,对象的引用存储在栈内存中,存放的是类型以及hash值,如Integer@0xff67。而对象里的内容实际上是存储在堆内存中的。如果你这句int a只是在某个对象内作为成员变量。明白了么?java的内存区分,除了栈内存、堆内存,还有方法区以及字符串的串池等,也就是32bit,long类型的才会是64bit。而你说的表示地址我们称为堆内存。创建的对象以及对象中的方法和数据是存储在堆内存中的。JVM会在栈内存中建立对象的引用,那么根本不会涉及到栈内存。a就存储在它所在的那个对象的堆内存中,然后当执行到new语句时,在堆内存中创建对象,这时就将这个对象的类型以及这块区域的内存地址值赋给引用,然后进行对象中数据的初始化。也就是说,如果是在方法内部中被执行到你理解混了。我们要看你这句int a处于什么地方,所以就是4字节,就会在栈内存中分配内存。如果你有兴趣,可以去搜搜看
本回答被网友采纳
看不懂你说什么,不过好像大致没错,你说的这种情况和普通对象类似.简单说,栈存的是地址,堆存的是具体数据你说的没有赋值的基本类型,比如方法中的基本类型就这样的情况不过不赋处置,编译器都过不了不赋初值的不是你说的这种情况
确实会占用,你的理解是正确的。Java变量在内存中的储存分为引用和值两部分。就基本类型的局部变量而言,如果两个变量具有相同的值,那么他们就是指向相同地址的不同引用。比如int a = 5;int b = 5;那么a和b在内存中占有不同的引用所在的空间,但指向相同的值(即5)所在的空间。但是,关注一个未初始化的变量是否占有内存意义是不大的,因为Java语言规定,要使用变量,变量必须初始化(即使是看似可以不初始化的成员变量,其声明时仍然有默认的初始值)。从业务逻辑的角度上来看,未初始化的变量也是无法被使用的。因此一般情况下我们会笼统地将变量的引用和变量的值所占的空间统一起来看,不会单纯地分开来看。如果两个引用指向同一个对象,我们会认为两个引用使用的是同一个地址,而不会细节到两个不同的引用地址和一个值地址。如果说的不对还请见谅,希望能解决你的疑惑。
其他1条回答
为您推荐:
其他类似问题
java程序的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【java基础】成员变量和局部变量02
时间: 00:39:31
&&&& 阅读:111
&&&& 评论:
&&&& 收藏:0
标签:成员变量和局部变量(2)
成员变量的初始化和内存中的运行机制
& & & & 当系统加载类或者创建类的实例的时候,系统会自动为成员变量分配内存空间,并自动指定初始值。
public class Person {
//定义一个静态的变量
public static S
//定义一个非静态的变量
public static void main(String[] args) {
/*当person类加载的时候,静态变量就已经存在了,在堆内存中*/
//实例化person对象 在堆内存中创建一个person对象
//里面有一个属性name =
//在栈内存中有一个p指向这个对象
Person p = new Person();
//给name属性赋值
p.name="郑小辉";
//通过类名给city赋值
Person.city="合肥";
//通过对象给city赋值
p.city="蚌埠";
//创建一个新的person对象
Person p1 = new Person();
//给name赋值
p1.name="郑大钱";
局部变量的初始化和内存中的运行机制
& & & & 局部变量(除了形参)必须要显性初始化后才能使用,系统不会为局部变量执行初始化,也就是定义了局部变量之后,系统不会给这个变量分配内存空间,直到程序为变量赋初始值之后,系统才会给他分配内存空间并将初始值保存在里面。
& & & & 局部变量不属于任何类或实例,所以总是会保存在所在方法的栈内存中,基本数据类型保存的是数据本身,引用数据类型保存的是引用
& & & & 栈内存中的变量无需系统垃圾回收,局部变量只保存基本数据类型的值或对象的引用,所以占得内存区通常比较小。标签:原文地址:http://www.cnblogs.com/zhengchenhui/p/5762988.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!151被浏览7,916分享邀请回答383 条评论分享收藏感谢收起1510 条评论分享收藏感谢收起}

我要回帖

更多关于 bat 定义变量赋值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信