length 和 size 辨析

本文通过几个示例对比了Java中数组与集合的长度获取方式,总结了String类型的方法length(),静态数组的length属性,动态数组(如ArrayList)的size()方法的使用区别。
import java.util.*;

public class testLengthAndSize
{
    public static  void main(String[] args)
    {
        String[] a=new String[5];
        ArrayList aList=new ArrayList();
        testLengthAndSize[] test=new testLengthAndSize[5];

//        System.out.println("a.size="+a.size());                //no such method
        System.out.println("a.length="+a.length);
        System.out.println("a[0]="+a[0]);

//        System.out.println("aList.length="+aList.length);   //no such method or field
        System.out.println("aList.size="+aList.size());
//        System.out.println("aList.size="+aList.get(0));          //RuntimeExecption---IndexOutOfBoundsException

        System.out.println("test.length="+test.length);
//        System.out.println("test.size="+test.size());
        System.out.println("test[0]="+test[0]);

/** In Summary
"String" type has length() method;

"array" type does not have length() method; "static array" has length field;

"Dynamic array" type has "size()" method, but has neither length field nor length() method;
**/
        }
}
<think>嗯,用户现在问的是汇编语言中的lengthsize。首先,我需要确认这两个术语在汇编中的具体含义,因为不同的汇编器可能有不同的伪指令或用法。比如,MASMNASM可能会有区别,但用户可能没有明确说明用的是哪种汇编器,所以需要一般性的解释。 回顾之前的对话历史,用户之前询问的是SQL实验总结,现在转向汇编语言,可能是在学习计算机组成或低级编程相关的课程。用户可能是学生或者刚入门的开发者,需要理解汇编中的基本概念。 首先,想到在MASM(Microsoft Macro Assembler)中,LENGTHSIZE是常用的操作符。LENGTH用于获取数组元素的个数,而SIZE则是数组占用的总字节数。例如,定义一个数组arr dw 10 dup(0),LENGTH arr会返回10,而SIZE arr则是10*2=20字节。需要解释清楚这两个操作符的区别,以及它们如何与数据类型的大小相关联。 另外,需要考虑其他汇编器的情况。比如在NASM中,可能没有直接的LENGTHSIZE操作符,而是通过其他方式计算数组长度,比如使用$ - arr这样的表达式来获取字节数,再除以元素大小得到元素个数。这时候需要指出不同汇编器之间的差异,避免用户混淆。 用户的深层需求可能是想正确获取数组的长度或大小,以便在循环或内存操作中使用。他们可能在编写汇编程序时遇到了问题,比如数组越界或者计算错误,因此需要明确如何正确使用这些操作符。需要给出具体的例子,说明在不同情况下如何应用LENGTHSIZE,以及注意事项,比如只能用于数组定义后的情况,而不能用于指针或动态分配的内存。 此外,还需要区分伪指令实际操作符,可能存在的常见错误,比如误用在非数组变量上,导致结果不符合预期。需要提醒用户在使用时确保变量确实是数组类型,并且正确理解每个操作符的计算方式。 总结来说,回答应该包括以下几点: 1. 在MASM中,LENGTHSIZE的定义及区别。 2. 具体示例说明用法。 3. 其他汇编器中的不同处理方法。 4. 使用时的注意事项常见错误。 5. 强调理解数据定义内存布局的重要性。 这样用户不仅能了解这两个操作符的用法,还能避免在不同环境下的使用误区,确保他们能正确应用在实际编程中。</think>在汇编语言中,`LENGTH``SIZE`是用于操作数组或数据块的伪指令(具体语法可能因汇编器不同略有差异),以下是它们的核心区别与用法: --- ### **1. LENGTH(元素数量)** - **定义**:表示数组**元素的总个数**。 - **示例**: ```asm arr DW 10 DUP(0) ; 定义含10个WORD元素的数组 ``` - `LENGTH arr` 计算结果为 **10**(元素数量)。 --- ### **2. SIZE(总字节数)** - **定义**:表示数组**占用的总内存字节数**,计算公式为: `SIZE = LENGTH × 单个元素字节数` - **示例**: ```asm arr DW 10 DUP(0) ; 每个WORD占2字节 ``` - `SIZE arr` 计算结果为 **10 × 2 = 20 字节**。 --- ### **关键区别** | 操作符 | 含义 | 依赖关系 | 典型用途 | |--------|--------------|--------------------------|------------------------| | LENGTH | 元素个数 | 仅与数组声明长度相关 | 循环遍历数组元素 | | SIZE | 总字节大小 | 依赖元素个数数据类型 | 内存操作(如复制/填充)| --- ### **注意事项** - **仅适用于静态数组**:两者均基于汇编时的数组声明计算,**不适用于动态内存**。 - **MASM与NASM差异**: - MASM直接支持`LENGTH``SIZE`; - NASM需手动计算(如`($-arr)/类型字节数`获取元素数量)。 - **数据类型敏感**:若元素类型为`DWORD`(4字节),`SIZE`值会翻倍。 --- ### **应用场景** - **循环控制**:用`LENGTH`设定循环次数(如遍历数组)。 - **内存操作**:用`SIZE`配合`MOVSB`等指令复制数据块。 - **调试辅助**:验证数据定义是否符合预期内存占用。 --- 理解这两个操作符的本质差异,是编写高效内存操作代码的关键基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值