精华内容
下载资源
问答
  • 主要介绍了Java如何获取数组和字符串的长度(length还是length()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • java中数组的.length属性Class A: public void run() { byte[] sendDateBuff=new byte[593]; sen正常来说,java中数组长度一旦确定就不会因为数组中存入多少数据而改变,不会出现你说的一会是5一会是593的情况。Java...

    java中数组的.length属性

    Class A: public void run() { byte[] sendDateBuff=new byte[593]; sen正常来说,java中数组长度一旦确定就不会因为数组中存入多少数据而改变,不会出现你说的一会是5一会是593的情况。

    Java中定义类的一个属性为数组

    我代码如下: class Shuzu{ String word; /**/ public void xs(){ Systeclass Shuzu { String word; // 不知道你要什么类型的数组,所以给你定一个一个Object类型的呵呵 Object[] num; public Shuzu(int n) { this.num = new Object[n]; } public void xs() { System.out.println(word); // 循环打印数组中的内容 for

    在java中使用数组有什么好处啊?

    数组的定义 语法有两种: type arrayName[]; type[] arrayName; type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。

    length属性,表示数组的长度

    java中 如果想要获得数组中可以保存的元素个数,那可以使用 array.length()方法 会返回一个int类型的 的值 表示数组中元素的个数

    展开全文
  • 为什么使用length获取Java数组的长度

    万次阅读 多人点赞 2016-05-13 12:28:10
    记得vamcily 曾问我:“为什么获取数组的长度用.length(成员变量的形式),而获取String的长度用.length()(成员方法的形式)?”   我当时一听,觉得问得很有道理。做同样一件事情,为什么采用两种风格迥异的...

    记得vamcily 曾问我:“为什么获取数组的长度用.length(成员变量的形式),而获取String的长度用.length()(成员方法的形式)?”

     

    我当时一听,觉得问得很有道理。做同样一件事情,为什么采用两种风格迥异的风格呢?况且,Java中的数组其实是完备(full-fledged)的对象,直接暴露成员变量,可能不是一种很OO的风格。那么,设计Java的那帮天才为什么这么做呢?

     

    带着这个疑问,我查阅了一些资料,主要是关于“JVM是如何处理数组”的。

     

    数组对象的类是什么?

     

    既然数组都是对象,那么数组的类究竟是什么呢?当然不是java.util.Arrays啦!我们以int一维数组为例,看看究竟。

     

    [java]  view plain copy
    1. public class Main {  
    2.     public static void main(String args[]){  
    3.         int a[] = new int[10];  
    4.         Class clazz = a.getClass();  
    5.         System.out.println(clazz.getName());  
    6.     }  
    7. }  

    在SUN JDK 1.6上运行上述代码,输出为:

    [I

    看起来数组的类很奇怪,非但不属于任何包,而且名称还不是合法的标识符(identifier)。具体的命名规则[1]可以参见java.lang.Class.getName()的javadoc。简单的说,数组的类名由若干个'['和数组元素类型的内部名称组成,'['的数目代表了数组的维度。

    具有相同类型元素和相同维度的数组,属于同一个类。如果两个数组的元素类型相同,但维度不同,那么它们也属于不同的类。如果两个数组的元素类型和维度均相同,但长度不同,那么它们还是属于同一个类。

     

    数组的类有哪些成员呢?

    既然我们知道了数组的类名是什么,那么就去看看数组的类究竟是什么样的吧?有哪些成员变量?有哪些成员方法?length这个成员变量在哪?是不是没有length()这个成员方法?

    找来找去,在JDK的代码中没有找打'[I'这个类。想想也对,'[I'都不是一个合法的标识符,肯定不会出现public class [I {...}这样的Java代码。我们暂且不管[I类是谁声明的,怎么声明的,先用反射机制一探究竟吧。

    [java]  view plain copy
    1. public class Main {  
    2.     public static void main(String[] args) {  
    3.     int a[] = new int[10];  
    4.     Class clazz = a.getClass();  
    5.     System.out.println(clazz.getDeclaredFields().length);  
    6.     System.out.println(clazz.getDeclaredMethods().length);  
    7.     System.out.println(clazz.getDeclaredConstructors().length);  
    8.     System.out.println(clazz.getDeclaredAnnotations().length);  
    9.     System.out.println(clazz.getDeclaredClasses().length);  
    10.     System.out.println(clazz.getSuperclass());  
    11.     }  
    12. }  

    在SUN JDK 1.6上运行上述代码,输出为:

    0
    0
    0
    0
    0
    class java.lang.Object

     

    可见,[I这个类是java.lang.Object的直接子类,自身没有声明任何成员变量、成员方法、构造函数和Annotation,可以说,[I就是个空类。我们立马可以想到一个问题:怎么连length这个成员变量都没有呢?如果真的没有,编译器怎么不报语法错呢?想必编译器对Array.length进行了特殊处理哇!

     

    数组的类在哪里声明的?

     

    先不管为什么没有length成员变量,我们先搞清楚[I这个类是哪里声明的吧。既然[I都不是合法的标识符,那么这个类肯定在Java代码中显式声明的。想来想去,只能是JVM自己在运行时生成的了。JVM生成类还是一件很容易的事情,甚至无需生成字节码,直接在方法区中创建类型数据,就差不多完工了。

     

    还没有实力去看JVM的源代码,于是翻了翻The JavaTM Virtual Machine Specification  Second Edition,果然得到了验证,相关内容参考5.3.3 Creating Array Classes

    规范的描述很严谨,还掺杂了定义类加载器和初始化类加载器的内容。先不管这些,简单概括一下:

    1. 类加载器先看看数组类是否已经被创建了。如果没有,那就说明需要创建数组类;如果有,那就无需创建了。
    2. 如果数组元素是引用类型,那么类加载器首先去加载数组元素的类。
    3. JVM根据元素类型和维度,创建相应的数组类。

    呵呵,果然是JVM这家伙自个偷偷创建了[I类。JVM不把数组类放到任何包中,也不给他们起个合法的标识符名称,估计是为了避免和JDK、第三方及用户自定义的类发生冲突吧。

     

    再想想,JVM也必须动态生成数组类,因为Java数组类的数量与元素类型、维度(最多255)有关,相当相当多了,是没法预先声明好的。

     

    居然没有length这个成员变量!

     

    我们已经发现,偷懒的JVM没有为数组类生成length这个成员变量,那么Array.length这样的语法如何通过编译,如何执行的呢?

    让我们看看字节码吧!编写一段最简单的代码,使用jclasslib查看字节码。

    [java]  view plain copy
    1. public class Main {  
    2.     public static void main(String[] args) {  
    3.     int a[] = new int[2];  
    4.         int i = a.length;  
    5.     }  
    6. }  

    使用SUN JDK 1.6编译上述代码,并使用jclasslib打开Main.class文件,得到main方法的字节码:

    0 iconst_2                   //将int型常量2压入操作数栈
    1 newarray 10 (int)    //将2弹出操作数栈,作为长度,创建一个元素类型为int, 维度为1的数组,并将数组的引用压入操作数栈
    3 astore_1                 //将数组的引用从操作数栈中弹出,保存在索引为1的局部变量(即a)中
    4 aload_1                  //将索引为1的局部变量(即a)压入操作数栈
    5 arraylength            //从操作数栈弹出数组引用(即a),并获取其长度(JVM负责实现如何获取),并将长度压入操作数栈
    6 istore_2                 //将数组长度从操作数栈弹出,保存在索引为2的局部变量(即i)中
    7 return                    //main方法返回

    可见,在这段字节码中,根本就没有看见length这个成员变量,获取数组长度是由一条特定的指令arraylength实现(怎么实现就不管了,JVM总有办法)。编译器对Array.length这样的语法做了特殊处理,直接编译成了arraylength指令。另外,JVM创建数组类,应该就是由newarray这条指令触发的了。

     

    很自然地想到,编译器也可以对Array.length()这样的语法做特殊处理,直接编译成arraylength指令。这样的话,我们就可以使用方法调用的风格获取数组的长度了,这样看起来貌似也更加OO一点。那为什么不使用Array.length()的语法呢?也许是开发Java的那帮天才对.length有所偏爱,或者抛硬币拍脑袋随便决定的吧。 形式不重要,重要的是我们明白了背后的机理。

     

    Array in Java

    最后,对Java中纯对象的数组发表点感想吧。

     

    相比C/C++中的数组,Java数组在安全性要好很多。C/C++常遇到的缓存区溢出或数组访问越界的问题,在Java中不再存在。因为Java使用特定的指令访问数组的元素,这些指令都会对数组的长度进行检查。如果发现越界,就会抛出java.lang.ArrayIndexOutOfBoundsException。

     

    Java数组元素的灵活性比较大。一个数组的元素本身也可以是数组,只要所有元素的数组类型相同即可。我们知道数组的类型和长度无关,因此元素可以是长度不同的数组。这样,Java的多维数组就不一定是规规矩矩的矩阵了,可以千变万化。

    展开全文
  • 数组长度:arr.length; 字符串长度:s.length(); 集合大小:c.size(); 数组是一个容器,当它被创建后,不仅元素的类型是确定的,元素的个数也是确定的。换句话说,数组的长度是确定的,不可能再增加或者减少。因此...

    数组长度:arr.length; 
    字符串长度:s.length(); 
    集合大小:c.size();

    数组是一个容器,当它被创建后,不仅元素的类型是确定的,元素的个数也是确定的。换句话说,数组的长度是确定的,不可能再增加或者减少。因此,数组可以使用一个字段(length)来表示长度。

    数组没有单独定义成一个类,而字符串 String 是一个类,length() 方法返回的正是字符数组 value 的长度(length),value 本身是 private 的,因此需要为 String 类提供一个 public 级别的方法(length())来供外部访问字符的长度。

     

    Collections 类使用方法 collection.size()来计算集合的长度, 方法collection.add() 来添加数据,方法collection.get(i)来读取数据。

     

    展开全文
  • JAVA中String.length()中文只一个字节

    千次阅读 2021-03-15 00:13:16
    最近在搞APK玩的时候遇到一个问题,java中String.length()函数计算中文字符时只做一个字符长度,但是在c语言中,当我通过recv函数来读取时,虽然字符长度可能少了,但是居然也能全部读出来,这个还真没搞懂,不过...

    最近在搞APK玩的时候遇到一个问题,java中String.length()函数计算中文字符时只算做一个字符长度,但是在c语言中,当我通过recv函数来读取时,虽然字符长度可能少了,但是居然也能全部读出来,这个还真没搞懂,不过问题的关键不在这,关键是C语言中的strlen()函数计算字符串长度时,由于是utf-8语言环境,中文是占三个字节的。所以长度不一致,导致服务端程序出错。我服务端是通过一个while循环来读取数据的,因为有遇到过数据比较大时,socket通道是分包发送的,一次性读取某个比较大的数据时,会发生丢数据的想象,虽然网上讲(协议接收到的数据可能大于buf的长度,所以 在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的),但是我的buf长度足够大,还是会丢失,具体原因也没找到,总之,就多调用几回recv就ok了 。言归正传,解决客户端和服务端计算包含中文字符串长度不一致的问题,我在客户端通过计算字符串中包含的中文字符个数*2+String.length()的方就解决了。  方法网上很多。

    public int getChineseNum()     {           String regEx = "[\\u4e00-\\u9fa5]";           Pattern p = Pattern.compile(regEx);           Matcher m = p.matcher(s);           while(m.find())               count++;           return count;         }

    展开全文
  • 限时 1 秒钟给出答案,来来来,听我口令:“Java 如何获取数组和字符串的长度length 还是 length()?” 在逛 programcreek 的时候,我发现了上面这个主题。说实话,我当时脑海中浮现出了这样一副惊心动魄的画面: ...
  • 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法. 3....
  • java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性。java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法。这篇文章...
  • Java 字节数组的长度length

    千次阅读 2019-05-19 03:17:08
    字节数组开始的长度length即为数组的size,但是当其被字符串对应的字符数组复制后,其长度就变为了字符串的长度 public class Buf_test { byte[] buf; int [] array; public void test() { buf = new ...
  • java -length的三种用法说明

    千次阅读 2021-02-26 21:11:18
    javalength主要有三种用法,本博客只介绍前两种:1 Java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.2 java中的length()方法是针对字符串String说的,如果想...
  • Java:获取字符串长度length())

    万次阅读 2019-05-11 01:15:32
    Java中,要获取字符串的长度,可以使用 String 类的 length() 方法,其语法形式如下: 字符串名.length(); 例:在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为密码...
  • StringBuilder类的length()方法返回StringBuilder对象包含的字符数。此方法返回当前由StringBuilder对象表示的字符序列的长度。...下面的程序演示StringBuilder类的length()方法:范例1:// Java program to demo...
  • java中用length求二维数组的长度

    千次阅读 多人点赞 2019-07-21 23:06:24
    今天刷题的时候碰到二维数组长度的问题,直接敲代码验证~ 用事实说话: 说明length求得的是二维数组的行数,即data[i][j]中的i 但如果要求二维数组的列数呢?很简单,用data[0].length就好了~ ...
  • Java File length()方法

    千次阅读 2021-02-26 16:43:47
    Java File length()方法java.io.File.length()返回此抽象路径名定义的文件的长度。如果此路径名定义了一个目录返回值未指定。1 语法public long length()2 参数无3 返回值该方法返回表示此抽象路径名的文件的长度,...
  • Java length()方法:获取字符串的长度

    千次阅读 2021-02-12 10:52:30
    Java String中的length() 方法用于获取字符串的长度,并以 in t型变量返回该字符串的长度。语法:length();示例使用 length() 函数获取字符串 strCom2 的长度,并将返回的结果赋值给 int 型变量 length。String ...
  • Java获取字符串长度length())

    万次阅读 多人点赞 2019-07-03 20:02:23
    Java 中,要获取字符串的长度,可以使用 String 类的 length() 方法,其语法形式如下: 字符串名.length(); 例 1 在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为...
  • 关于Javalengthlength()、size()的区别

    万次阅读 多人点赞 2018-04-10 18:31:39
    以前总是觉得自己好像会了,但是某天忽然面对这个笔试题还是...首先区分一下lengthlength();length不是方法,是属性,数组的属性;public static void main(String[] args) { int[] intArray = {1,2,3}; System...
  • Java String length()方法

    千次阅读 2020-07-13 12:44:52
    Java String length() function returns the length of the sequence of characters... Java String length()函数返回此对象表示的字符序列的长度Java字符串长度 (Java String length) Sometimes we have to ...
  • Java File length()用法及代码示例

    千次阅读 2021-02-26 16:43:52
    length()函数是Java中File类的一部分。该函数返回此抽象路径名为length表示的文件的长度。该函数返回代表位数的long值,如果文件不存在或发生异常,则返回0L。函数签名:public long length()用法:long var = file....
  • Java 中字符串以 Unicode 方式编码的, 其长度通常计算的是字符数,一个中文也一个字符: public static void main(String[] args) { String fileName = "中文English,12345";//中文、英文、标点、数字都一个...
  • Java中的length & length()开始

    千次阅读 2019-03-08 17:07:59
    搜索微信公众号“速学Java”关注即可领取小编精心准备的资料一份! 首先,你能快速回答以下问题吗? 我向不同级别的开发者提出了这个问题:入门级和中级级。 他们不能正确或自信地回答问题。 IDE在提供方便的...
  • Java获取List长度

    万次阅读 2020-03-04 20:00:36
    javalength属性是对于数组来说的,当用到数组长度时,则用到length; javalength()是对于String来说的,如果想看字符串的长度,则用length()方法; java中size()方法是对于泛型集合来说的,如果想知道泛型有...
  • Java修改数组长度

    千次阅读 2021-02-12 11:07:55
    java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码.[java] view plaincopyprint?import java.lang.reflect.Array;/*** Description: This ...
  • 字符:int length = str.length; 字节: int length = str.getBytes(“GBK”).length;
  • java获取字节的长度.

    千次阅读 2021-02-13 00:08:37
    我们经常要获取中文,数字,或者英文字符所占字节的长度,下面就列出各种编码格式下所占字节的长度:代码如下:package pack.java.midea.dao;import java.io.UnsupportedEncodingException;/*** 测试;* @author ...
  • JAVA 判断字符长度

    千次阅读 2021-02-12 10:51:43
    /*** 判断姓名字符长度* 字符串为空返回0;有中文返回中文字符数;无中文返回2*@paramCustomerSn*@return*/privateInteger getNameLength(Integer CustomerSn){Integer sealWidth= 32;CustomerDto customerDto=...
  • java String的长度

    千次阅读 2020-12-04 09:46:42
    String 首先要知道String的长度限制我们就需要知道String是怎么存储字符串的,String其实是...由此我们看到返回值类型是int类型,Java中定义数组是可以给数组指定长度的,当然不指定的话默认会根据数组元素来指定:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489,145
精华内容 195,658
关键字:

java算length长度

java 订阅