导航:首页 > 编程语言 > javaprimitive

javaprimitive

发布时间:2022-04-19 05:35:35

java集合框架的数组与容器

数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有primitives。数组是Java提供的,能随机存储和访问reference序列的诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以快速的访问其中的元素。但是速度是有代价的;当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧的数组里的reference全部导到新的里面。其实(我们以后会讲的)ArrayList就是这么做的。但是这种灵活性所带来的开销,使得ArrayList的效率比起数组有了明显下降。
Java对数组和容器都做边界检查;如果过了界,它就会给一个RuntimeException。这种异常表明这个错误是由程序员造成的,这样你就用不着再在程序里面检查了。
还有一些泛型容器类包括List,Set和Map。他们处理对象的时候就好像这些对象都没有自己的具体类型一样。也就是说,容器将它所含的元素都看成是(Java中所有类的根类)Object的。这样你只需要建一种容器,就能把所有类型的对象全都放进去。从这个角度来看,这种作法很不错(只是苦了primitive。如果是常量,你还可以用Java的primitive的Wrapper类;如果是变量,那就只能放在你自己的类里了)。与其他泛型容器相比,这里体现数组的第二个优势:创建数组的时候,你也同时指明了它所持有的对象的类型(这又引出了第三点--数组可以持有primitives,而容器却不行)。也就是说,它会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者是在提取对象的时候把对象的类型给搞错了。Java在编译和运行时都能阻止你将一个不恰当的消息传给对象。所有这并不是说使用容器就有什么危险,只是如果编译器能够帮你指定,那么程序运行会更快,最终用户也会较少收到程序运行异常的骚扰。
从效率和类型检查的角度来看,使用数组总是没错的。但是,如果你在解决一个更为一般的问题,那数组就会显得功能太弱了点。
不管你用的是那种类型的数组,数组的标识符实际上都是一个“创建在堆(heap)里的实实在在的对象的”reference。实际上是那个对象持有其他对象的reference。你即可以用数组的初始化语句,隐含地创建这个对象,也可以用new表达式,明确地创建这个对象,只读的length属性能告诉你数组能存储多少元素。它是数组对象的一部分(实际上也是你唯一能访问的属性或方法)。‘[]’语法是另一条访问数组对象的途径。
你没法知道数组里面究竟放了多少元素,因为length只是告诉你数组能放多少元素,也就是说是数组对象的容量,而不是它真正已经持有的元素的数量。但是,创建数组对象的时候,它所持有的reference都会被自动地初始化为null,所以你可以通过检查数组的某个“槽位”是否为null,来判断它是否持有对象。以此类推,primitive的数组,会自动来数字初始化为零,字符初始化为(char)0,boolean初始化为false。
容器类只能持有Object对象的reference。而数组除了能持有Objects的reference之外,还可以直接持有primitive。当然可以使用诸如Integer,Double之类的wrapper类。把primitive的值放到容器中,但这样总有点怪怪的。此外,primitive数组的效率要比wrapper类容器的高出许多。
当然,如果你使用primitive的时候,还需要那种“能随需要自动扩展的”容器类的灵活性,那就不能用数组了。你只能用容器来存储primitive的wrapper类。

Ⅱ java在传参的时候会自动装箱,这样设计有什么好处

虽然我猜题主自己是知道想问的是什么,但这个描述方式还是大大的不好。

Java的primitive type值作为参数传递给方法时,

如果接收该值的形式参数是匹配的primitive type则不会自动装箱,
如果接收该值的形式参数是匹配的包装类型则会自动装箱
这个行为在C#也是一模一样的,只是要把“primitive type”改为“值类型”(value type)。

故意举几个“反例”。
例如说,C#里这段代码是否会发生自动装箱:

public static void Foo(int i)
{
Console.WriteLine("i = {0}", i);
}

答案是:会。这里调用的WriteLine()方法是System.Console.WriteLine(String, Object),也就是说接收实际参数i的形式参数是一个object类型(引用类型)的,所以会发生自动装箱。

又例如说,Java例这段代码是否会发生自动装箱:

public static int foo(int a) {
return bar(a) + 1;
}

public static int bar(int b) {
return -b;
}

答案是:不会。从foo()调用bar()时,实际参数a与形式参数b是相互匹配的primitive type——都是int——因而不需要发生装箱操作。

题主多半实际上想问的是跟Java泛型的擦除实现跟C#泛型的具体化(reify)实现相关的。那是另一个话题了。

Ⅲ 有人知道在java里边primitive type 和wrapped type的区别

primitive type: 基本类型,像int、double就是。
wrapped type:包装类型,int—>Integer,double—>Decimal

基本类型跟就是不可实例化的,可以直接初始化、赋值、运算。不可调用方法,不可放入容器(要求必须是类实例才行)。
int i=10;
i++;

包装类型就是把基本类型变成一个类实例,一定要new才产生,可以调用方法,可以放入容器。
int tt=100;
tt++;
Integer kk=new Integer(tt); //tt的包装类实例
System.out.println(kk.intValue()); //还是101
HashMap m=new HashMap();
m.put("abc",kk);

String是特殊的,可以像基本类型这样用,但其实它是类实例来的,可以调用它的方法,也可以放入到容器里面。JVM对String作了特殊处理。
String s="123456";
System.out.println(s.substring(0,1));
HashMap m=new HashMap();
m.put("abc",s);

Ⅳ java变量 值的改变 问题

  1. 变量名(a,b...)本身是一个地址,而变量的值是在内存中分配的实际的内存数据,比如inta=1,就是指a这个地址指向存放了字面量数据1的内存数据。

  2. 变量值的改变是变量表示的地址的改变,差不多就是你说的意思

  3. 不能说基本数据类型都存在于栈,这是不准确的,首先你要搞清楚线程这个概念,java运行中,每一个线程都维持一个线程栈(也可以说成方法栈,因为线程就是运行你的方法代码的),线程栈由一个个栈帧组成,每一个栈帧都表示一个方法的调用(处于栈顶的栈帧就是当前正在运行的方法),所以可以知道,方法中的变量都是存放在栈帧(栈)中的,如果变量引用的是对象,由于对象还是得在堆中分配,那么就会有一个栈中的变量指向堆中的一个对象。但是一个类本身可以有实例变量啊,如果这个变量是一个基本类型的话,那这个变量就存在于堆中了啊,也就是说基本数据类型也可以存放在堆中啊。

  4. 对象的实体确实是存放在堆中没错啊


还有什么不懂可以继续问。

Ⅳ java中primitive怎么用可否用代码给我举个例子谢谢啦!!

说到primitive,必然也会提到它相对应的wrapped:
primitive type: 基本类型,像int、double就是。
wrapped type:包装类型,int—>Integer,double—>Decimal
基本类型跟就是不可实例化的,可以直接初始化、赋值、运算。不可调用方法,不可放入容器(要求必须是类实例才行)。
int i=10;
i++;

包装类型就是把基本类型变成一个类实例,一定要new才产生,可以调用方法,可以放入容器。
int tt=100;
tt++;
Integer kk=new Integer(tt); //tt的包装类实例
System.out.println(kk.intValue()); //还是101
HashMap m=new HashMap();
m.put("abc",kk);

String是特殊的,可以像基本类型这样用,但其实它是类实例来的,可以调用它的方法,也可以放入到容器里面。JVM对String作了特殊处理。
String s="123456";
System.out.println(s.substring(0,1));
HashMap m=new HashMap();
m.put("abc",s);

Ⅵ Eclipse在进行java程序调试时,变量后的id是什么为什么primitive类型没有显示相应的id

id是Eclipse的debugger自己生成的,用于告诉你哪些变量是指向同一个对象:id相同即指向同一个对象。primitive不是对象,所以就没有id。但是如果你用primitive的wrapper类,即Integer,Long(注意首字母是大写),那么就会有id了。

Ⅶ java中String 属于什么变量 primitive主数据类型变量还是对象引用变量

String是Java中的类不是基本数据类型,String是通过new一个String对象来存贮字符串的,在内存的堆里面开辟空间,同时在栈里面存储引用,指向堆里面的空间 例 String str=new String(); str就存放在栈中指向堆中开辟的空间

Ⅷ 在Java中什么是 Primitive 和 Reference 类型

Java的数据类型分为两类:primitive和reference类型
Java虽然是个面向对象的语言,也声称“Everything is object”- 一切都是对象。但是,我觉得还不够纯粹和彻底,和ruby或者python比较一下就知道了。在Java中,数字和布尔类型就不被看做对象,而是被称为primitive类型。不过也不见的就不好,本文也不是想对此评论和分析。本文是想阐述Java的数据类型。
Java的数据类型

Java的数据类型分为两类:primitive和reference类型。我们可以从hold数据这个角度来说。primitive类型可以hold数字和布尔数据;reference类型可以hold对象,接口和数组类型的数据的指针。可以想象后一种数据比较复杂,往往是一段数据,不像primitive的数据是比较单纯的数据单元,比如int,float和boolean。

Ⅸ primitive和reference各代表什么

在java里:
primitive type是基本类型,比如int,float,char
reference是引用,有点像c里的指针一样的东西,但它直接就代表了它所指的对象。c++里似乎也有引用这个叫法

Ⅹ asn1primitive.java在哪个包里面

java没有utils这个类,除非是同事写的,没有告诉自己,所以找不到
不过java有 java.util这个package。
包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包

阅读全文

与javaprimitive相关的资料

热点内容
如何查解压成功 浏览:647
代码编译服务器硬件配置2021 浏览:413
php如何选中相同的进行修改 浏览:623
工行app个人怎么给企业账户转账 浏览:149
汇编与程序员 浏览:666
压缩包解码器下载 浏览:130
爱旅行的预备程序员 浏览:111
安卓qq浏览器怎么转换到ios 浏览:292
不同编译器的库可以调用吗 浏览:455
灰度信托基金加密 浏览:421
宿迁程序员兼职网上接单 浏览:924
电视编译器怎么设置 浏览:276
手机如何解压汉字密码的压缩包 浏览:701
为什么很多程序员爱用vim 浏览:828
安卓手机怎么连接宝华韦健音响 浏览:555
12星座制作解压球 浏览:867
java调用oracle数据 浏览:827
怎么在服务器上上传小程序源码 浏览:304
空中加油通达信指标公式源码 浏览:38
分卷解压只解压了一部分 浏览:760