当前位置:文档之家› Java基本类型和引用类型

Java基本类型和引用类型

Java基本类型和引用类型
Java基本类型和引用类型

Java基本类型和引用类型

8种基本类型

一、4种整型

byte 1字节-128——127

short 2 字节-32,768 ——32,767

int 4 字节-2,147,483,648 ——2,147,483,647(超过20亿)

long 8字节-9,223,372,036,854,775,808——9,223,372,036854,775,807

注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型

二、2种浮点类型

float 4 字节32位IEEE 754单精度(有效位数6 –7位)

double 8 字节64位IEEE 754双精度(有效位数15位)

三、1种Unicode编码的字符单元

char 2 字节整个Unicode字符集

四、1种真值类型

boolean 1 位True或者false

3种引用类型

类class

接口interface

数组array

一、类Class引用

可以是我们创建的,这里我不多讲,主要是讲解几个java库中的类

Object :Object是一个很重要的类,Object是类层次结构的根类,每个类都使用Object作为超类,所有对象(包括数组)都实现这个类的方法。用Object可以定义所有的类

如:

Object object= new Integer(1); 来定义一个Interger类

Integer i=(Integer) object; 在来把这个Object强制转换成Interger类String :String类代表字符串,Java 程序中的所有字符串字面值(如"abc")都作为此类的实例来实现。检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本、在该副本中、所有的字符都被转换为大写或小写形式。

Date :Date表示特定的瞬间,精确到毫秒。Date的类一般现在都被Calendar 和GregorianCalendar所有代替

Void :Void 类是一个不可实例化的占位符类,它保持一个对代表Java 关键字void 的Class 对象的引用。

同时也有对应的Class如:Integer Long Boolean Byte Character Double Float Short

二、接口interface引用

可以是我们创建的,这里我不多讲,主要是讲解几个java库中的接口interface List:列表,此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引

(在列表中的位置)访问元素,并搜索列表中的元素。List 接口提供了两种搜索指定对象的方法。从性能的观点来看,应该小心使用这些方法。在很多实现中,它们将执行高开销的线性搜索。List 接口提供了两种在列表的任意位置高效插入和移除多个元素的方法。

add() : 在列表的插入指定元素。

remove():移除列表中指定位置的元素。

get(int index):返回列表中指定位置的元素。

Map

K - 此映射所维护的键的类型

V - 映射值的类型将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

put(K key,V value):将指定的值与此映射中的指定键关联(可选操作)。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值(当且仅当,返回

true 时,才能说映射m 包含键k 的映射关系)。remove(Object key)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。更确切地讲,如果此映射包含从满足(key==null ? k==null :key.equals(k))的键k 到值v 的映射关系,则移除该映射关系。(该映射最多只能包含一个这样的映射关系。)get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。

这里我们主要是用String List Map Object 是最常用Number ArrayList Arrays等

可以查考jdk的api

这些类和接口在https://www.doczj.com/doc/ca2508987.html,ng :提供利用Java 编程语言进行程序设计的基础类。和

java.unit:包含collection 框架、遗留的collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

第三讲 数据类型

第三讲数据类型 教学要求: 1.了解值类型和引用类型的区别 2.掌握数据类型转换的几种情况 教学学时: 2H 一.数据类型的分类 在C#中提供的数据类型有两大类:值类型和引用类型。 值类型直接存储数据,不可以为空,也不可以派生出新的类型,包括整型、实型、布尔型、字符型、结构型和枚举型,值类型数据在栈中存储。 static void Main(string[] args) { int x, y; x = 5; y = x; x=10; Console.WriteLine("x={0},y={1}", x, y); y = 20; Console.WriteLine("x={0},y={1}", x, y); Console.ReadKey(); } 引用类型存储对实际数据的引用(地址),引用类型分两步创建: 首先在栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的地址赋给引用变量。 C#有两个内置的引用类型:object类型和string类型。 object类型的变量可以引用任何类型的数据。 string类型的变量只可以引用字符串。 static void Main(string[] args) { string s1 = "agagssa"; string s2 = null; Console.WriteLine("s1={0},s2={1}", s1, s2); s2 = s1; s1 = "512512"; Console.WriteLine("s1={0},s2={1}", s1, s2);

Console.ReadKey(); } 补充知识(内存中的栈与堆的区别) 栈只能由系统自动分配,堆可以由程序员自主申请分配。 栈的空间较小(1M或2M),堆的空间较大(受限于系统有效虚拟内存)。 栈的访问速度快,堆的访问速度慢。 栈的使用不会产生碎片,而堆的使用会产生碎片。 对于使用用户自定义的类或系统定义的类用new关键字来创建一个新的对象时,过程也是这样的。 class Student { public int ID; public string Name; } class Program { static void Main(string[] args) { Student x = new Student(); x.ID = 5; https://www.doczj.com/doc/ca2508987.html, = "wang"; Student y; y = x; y.ID = 10; https://www.doczj.com/doc/ca2508987.html, = "cheng"; Console.WriteLine("x.ID={0},https://www.doczj.com/doc/ca2508987.html,={1}", x.ID, https://www.doczj.com/doc/ca2508987.html,); Console.WriteLine("y.ID={0},https://www.doczj.com/doc/ca2508987.html,={1}", y.ID, https://www.doczj.com/doc/ca2508987.html,); Console.ReadKey(); } } 二.值类型的数据与object类型数据之间的赋值类型转换 1. 将值类型的数据赋值给object类型变量时能自动完成将值类型的数据转换为object类型数据。 int x = 123; object obj1 = x; //相当于object obj1 = (object) x; x = x + 100; Console.WriteLine("x={0}", x); Console.WriteLine ("obj1={0}",obj1); Console.Read(); 输出结果: x=223 obj1=123 说明:

Java 基本数据类型取值范围讲解

Java 基本数据类型取值范围讲解 一、Java的类型词语理解: 1) 原始数据类型,简单类型,基本类型都是一个含义; 2)复合类型,扩展类型,复杂类型、引用类型都是一个含义; 3)浮点类型,实数、实型都是一个含义; 4)逻辑型、布尔型都是一个含义; 5)本人个人认同的类型分类: 阅读时需要理解: 定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把它们称为整数; 常量:就是直接的值; 变量:放置常量的容器,除了放置常量之外,也可以给变量一个运算式,变量中的值是可变的; 二、Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象

原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。 基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。 引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。 三、Java中的数据类型与内存的关系 在Java中,每个存放数据的变量都是有类型的,如: char ch;float x;inta,b,c; ch是字符型的,就会分配到2个字节内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也 是不同的。 所以给变量赋值前需要先确定变量的类型,确定了变量的类型,即确定了数据需分配内存空间的大小,数 据在内存的存储方式。 四、Java数据类型在内存中的存储: 1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内 存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型; 2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存 模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储 在有序的内存栈上的,而对象本身的值存储在内存堆上的; 区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念), 基本类型和引用类型的内存模型本质上是不一样的。 例1:我们分析一下”==“和equals()的区别。 首先,我定以两个String对象 String a="abc";

java基本数据类型习题(选择24)

1、下列哪一个是合法的标识符: A、12class; B、+viod; C、-5; D、_black; 2、下列哪一个不是JAVA语言中保留字: A、if; B、sizeof; C、private; D、null; 3、下列描述中正确的一项是: A、标识符首字符的后面可以跟数字; B、标识符不区分大小写; C、复合数据类型变量包括布尔型、字符型、浮点型; D、数组属于基本数据类型; 4、下列哪一项不属于变量的组成部分: A、变量名; B、变量属性; C、变量初值; D、变量大小; 5、下列关于变量组成部分描述正确的一项是: A、变量名不是标识符;

B、变量名是标识符; C、浮点型属于复合类型; D、变量属性分为:基本类型和符合类型; 6、下列选项中,哪一项不属于JAVA语言的简单数据类型: A、整数型; B、数组; C、字符型; D、浮点型; 7、下列关于变量作用域的描述中,不正确的一项是: A、变量属性是用来描述变量作用域的; B、局部变量作用域只能是它所在的方法的代码段; C、类变量能在类的方法中声明; D、类变量的作用域是整个类; 8、下列关于基本数据类型的说法中,不正确的一项是: A、boolean是JAVA非凡的置值,或者为真或者为假; B、float是带符号的32位浮点数; C、double是带符号的64位浮点数; D、char应该上是8位的Unicode字符; 9、下列关于溢出的说法中,正确的一项是: A、一个整型的数据达到整型能表示的最大数值后,再加1,则机器产生上溢,结果为整型的最大值; B、一个整型的数据达到整型能表示的最小数值后,再减1,

c#总复习题

一.选择题: 1. C#语言源代码文件的后缀名为______________. A .C# B .C C C .CSP D .CS AN: D 2. 构建桌面应用程序需要.NET提供的类库是_____________. A https://www.doczj.com/doc/ca2508987.html, B Windows.Form C XML D https://www.doczj.com/doc/ca2508987.html, AN: B 3. 与C++等语言相比,C#中增加的一个类成员访问修饰符是___________. A private B public C protected D internal AN: D 4. C#中程序的入口方法名是____________________. A Main B. main C Begin D using AN: A 5. 关于C#语言的基本语法,下列哪些说法是正确的? A. C#语言使用using 关键字来引用.NET 预定义的名字空间; B. 用C#编写的程序中,Main 函数是唯一允许的全局函数; C. C#语言中使用的名称不区分大小写; D. C#中一条语句必须写在一行内; AN: A 6.在C#中,表示一个字符串的变量应使用以下哪条语句定义? A. CString str; B. string str; C. Dim str as string D. char * str; AN:B 7.C#中的值类型包括三种,它们是____。 A.整型、浮点型、基本类型 B.数值类型、字符类型、字符串类型 C.简单类型、枚举类型、结构类型D.数值类型、字符类型、枚举类型 AN:C 8.枚举类型是一组命名的常量集合,所有整型都可以作为枚举类型的基本类型,如果类型省略,见约定为______。 A.int B.sbyte C.uint D.ulong AN:A 9.C#的引用类型包括类、接口、数组、委托、object和string。其中object______________根类。A.只是引用类型的B.只是值类型的 C.只是string类型的D.是所有值类型和引用类型的 AN:D 10.浮点常量有三种格式,下面_____________组的浮点常量都属于double类型。 A.0.618034,0.618034D, 6.18034E-1

Java中八种基本数据类型和八种封装数据类型

Java中八种基本数据类型和八种封装数据类型 初使值的求解过程及比较 作者:Zealjiang 1.八种基本数据类型 创建名为MemberTestBasic的java文件,其内容如下:public class MemberTestBasic { /** 八种基本类型 int, short, float ,double, long, boolean, byte, char */ int i; short s; float f; double d; long l; boolean bo; byte by; char c; public static void main(String[] args) { //创建对象m

MemberTestBasic m=new MemberTestBasic(); m.printMember(); } //为对象m创建一个printMember方法 public void printMember() { System.out.print("int->"+i+"\n"); System.out.print("short->"+s+"\n"); System.out.print("float->"+f+"\n"); System.out.print("double->"+d+"\n"); System.out.print("long->"+l+"\n"); System.out.print("boolean->"+bo+"\n"); System.out.print("byte->"+by+"\n"); System.out.print("char->"+c+"\n"); } } 运行结果如下:

实验3 JAVA基本数据类型

实训报告 实验三JA V A基本数据类型(2) 【实验目的】 1.掌握标识符的定义规则。 2.掌握表达式的组成。 3.掌握Java 基本数据类型及其使用方法。 4.理解定义变量的作用,掌握定义变量的方法。 5.掌握各种运算符的使用及其优先级控制。 6.通过以上内容,掌握Java 语言的编程规则。 【预习内容】 1.一个声明Java 不同数据类型:整形、浮点型、字符型等类型的特点。 2.JAVA各类运算符:算术运算符、关系运算符、逻辑运算符的使用方法。 3. JAVA各类表达式:算术表达式、关系表达式、逻辑表达式的综合应用。 4.熟练掌握JAVA常用输入输出方法的使用。 5.System.out以及Scanner类的使用的。 【实验内容及步骤】 1、请利用Scanner类通过键盘输入三个不同值的整数a、b和c,并将中间值的数显示于屏幕上。 [程序清单] import java.util.Scanner; public class xjp1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int a,b,c; System.out.print("请输入a:"); a = scan.nextInt(); System.out.print("请输入b:"); b = scan.nextInt();

System.out.print("请输入c:"); c = scan.nextInt(); if(a>b && a>c) { if(b>c) System.out.println("中间值=" + b); else System.out.println("中间值=" + c); } if(b>a && b>c) { if(a>c) System.out.println("中间值=" + a); else System.out.println("中间值=" + c); } if(c>a && c>b) { if(a>b) System.out.println("中间值=" + a); else System.out.println("中间值=" + b); } } } [程序运行结果(截图)] 2、、请利用Scanner类通过键盘输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,要求连同算式一起输出,每个算式占一行。 例:a等于10,b等于5, a+b的结果输成 10+5=15

2014-2015-1C#复习题

2014-2015-1《C#桌面程序应用开发》复习题 一、选择题 1、装箱是把值类型转换到( b )类型。 a)数组b)引用c)char d)string 2、下列哪个类型的对象是https://www.doczj.com/doc/ca2508987.html,在非连接模式下处理数据内容的主要对象?(d ) a) Command b) Connection c) DataAdapter d) DataSet 3、枚举类型是一组命名的常量集合,所有整型都可以作为枚举类型的基本类型,如果类型 省略,则定义为( a )。 a) int b) sbyte c) uint d) ulong 4、面向对象编程中的“继承”的概念是指( b ) a) 对象之间通过消息进行交互b)派生自同一个基类的不同类的对象具有一些共同特征c)对象的内部细节被隐藏d) 派生类对象可以不受限制地访问所有的基类对象5、在C#的类结构中,class关键字前面的关键字是表示访问级别,下面哪个关键字表示该类只能被这个类的成员或派生类成员访问? ( d )。 a) public b) private c) internal d) protected 6、下列类型中, 哪些不属于引用类型?( b )。 a) String b) int c) Class d) Delegate 7、数组pins的定义如下: int[] pins=new int[4]{9,2,3,1}; 则pins[1]=( b ) a) 1 b) 2 c) 3 d) 9 8、创建数据库连接使用的对象是( a )。 a) Connection b) Command c) DataReader d) DataSet 9、调用方法时,如果想给方法传递任意个数的参数时,应选用哪个关键字( c )。 a) ref b) out c) params d) 无特殊要求 10、C#中TestClass为一自定义类,其中有以下属性定义 public void Property{…}开卷考 使用以下语句创建了该类的对象,并使变量obj引用该对象: TestClass obj = new TestClass(); 那么,可通过什么方式访问类TestClass的Property属性?( a ) a) Obj,Property; b) MyClass.Property; c) obj :: Property; d) obj.Property (); 11、下列关于C#面向对象应用的描述中,哪项是正确的?( c )。 a) 派生类是基类的扩展,派生类可以添加新的成员,也可去掉已经继承的成员 b) abstract方法的声明必须同时实现 c) 声明为sealed的类不能被继承 d)接口像类一样,可以定义并实现方法 12、C#中导入某一命名空间的关键字是( a )。 a) using b) use c)import d) include 13、一般情况下,异常类存放在什么命名空间中?( b )。 a) 生成异常类所在的命名空间b) System.Exception命名空间 c) System.Diagnostics命名空间d) System命名空间 14、若将数据库中的数据填充到数据集,应调用SqlDataAdapter的(c )方法。

C语言的基本数据类型及其表示

3.2C语言的基本数据类型及其表示 C语言的基本数据类型包括整型数据、实型数据和字符型数据,这些不同数据类型如何表示?如何使用?它们的数据范围是什么?下面我们分别进行介绍。 3.2.1常量与变量 1.常量 常量是指程序在运行时其值不能改变的量,它是C语言中使用的基本数据对 象之一。C语言提供的常量有: 以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型,例如:123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;123.0是实型常量,占四个存储字节,数的表示范围是-3.410-38~3.41038。 需要注意的是,常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中。 2.符号常量 在C程序中,常量除了以自身的存在形式直接表示之外,还可以用标识符来表示常量。因为经常碰到这样的问题:常量本身是一个较长的字符序列,且在程序中重复出现,例如:取常数的值为3.1415927,如果在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,而且,当需要把的值修改为3.1415926536时,就必须逐个查找并修改,这样,会降低程序的可修改性和灵活性。因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。 C语言中用宏定义命令对符号常量进行定义,其定义形式如下: #define标识符常量 其中#define是宏定义命令的专用定义符,标识符是对常量的命名,常量可以是前面介绍的几种类型常量中的任何一种。该使指定的标识符来代表指定的常量,这个被指定的标识符就称为符号常量。例如,在C程序中,要用PAI代表实型常量3.1415927,用W代表字符串常量"Windows98",可用下面两个宏定义命令: #define PAI3.1415927 #define W"Windows98" 宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。例如,对于以上两个宏定义命令,编译程序时,编译系统首先将程序中除这两个宏定义命令之外的所有PAI替换为3.1415927,所有W替换为Windows98。因此,符号常量通常也被称为宏替换名。 习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。例3-1是符号常量的一个简单的应用。其中,PI为定义的符号常量,程序编译时,用3.1416替换所有的PI。 例3-1:已知圆半径r,求圆周长c和圆面积s的值。

C#引用类型和值类型的区别

实际举例C#引用类型和值类型的区别 我们都知道,c#的两大数据类型分别为值类型和引用类型。很多人或许闭着眼睛都能说出值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等,但是当被问及到二者之间的联系和区别,什么时候用struct什么时候用class时,就常常混淆不清了。为此,了解值类型和引用类型的本质差异就变的很有必要了。 ?值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量就永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而发生相互影响。 ?从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低,这也正是c#需要定义两种数据类型的原因之一。 ?值类型均隐式派生自System.ValueType,而System.ValueType又直接派生于System.Object,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,注意所有的值类型都是密封(sealed)的,所以无法派生出新的值类型。而且System.ValueType 本身是一个类类型,而不是值类型,因为它重写了object的Equals()方法,所以对值类型将按照实例的值来比较,而不是比较引用地址。 ?C# 的统一类型系统,使得值类型可以转化为对象来处理,这就是常说的装箱和拆箱。由于装拆箱需要装建全新对象或做强制类型转换,这些操作所需时间和运算要远远大于赋值操作,因此不提倡使用它,同时也要尽量避免隐式装拆箱的发生。 注:栈是操作系统分配的一个连续的内存区域,用于快速访问数据。因为值类型的容量是已知的,因此它可存储在栈上。而托管堆是CLR在应用程序启动时为应用程序预留的一块连续内存区,是用于动态内存分配的内存区,引用类型的容量只有到运行时才能确定,所有用堆来存储引用类型。 C#的两种数据类型延伸之一--嵌套类型的内存分配 对于引用类型嵌套值类型,以及值类型嵌套引用类型的情况下,内存分配可以根据以下两条规律来判断: ?引用类型始终部署在托管堆上; ?值类型总是分配在它声明的地方:作为字段时,跟随其所属的对象存储;作为局部变量时,存储在栈上。 C#的两种数据类型延伸之二--string类型 string是一个很有意思的引用类型,为什么说它很有意思呢?因为它表现了很多值类型的特点。请看一下代码示例: 示例1 string str1 = "abc";

java的基本数据类型有八种

java的基本数据类型有八种 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! java的基本数据类型有八种四类八种基本数据类型1. 整型byte(1字节)short (2个字节)int(4个字节)long (8个字节)2.浮点型float(4个字节)double(8个字节)3.逻辑性boolean(八分之一个字节)4.字符型char(2个字节,一个字符能存储下一个中文汉字)基本数据类型与包装类对应关系和默认值short Short (short)0int Integer 0long Long 0Lchar Char '\u0000'(什么都没有)float Floa t0.0fdouble Double 0.0dboolean Boolean false 若某个类的某个成员是基本数据类型,即使没有初始化,java也会确保它获得一个默认值,如上所示。(这种初始化方法只是用于成员变量,不适用于局部变量)。jdk1.5支持自动拆装箱。可以将基本数据类型转换成它的包装类装箱Integer a = new Integer ();a = 100;拆箱int b = new Intger(100);一个字节等于8位,一个字节等于256个数,-128到127一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节一个汉字两个字符,占用两个字节基本数据类型自动转换byte->short , char->int->longfloat->doubleint ->floatlong->double小可转大,大转小会失去精度。字符串与基本类型或其他类型间的转换⑴其它

值类型和引用类型的区别

值类型和引用类型的区别[转] 似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有一次电话面试中,我直接跟面试官说:“值类型是现金,引用类型是存折”,后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥。我这人不善于背理论的教条,喜欢把书本上那些生硬的话跟现实生活中常见的事物联系起来理解和记忆。 直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。 声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样。具体哪些类型是值类型哪些是引用类型,大家翻翻书,背一背就好了,不过我想,做过一段时间的开发,即使您背不了书上教条的定义,也不会把值类型和引用类型搞混的。接下来,还是老规矩,咱看码说话吧。 1:public class Person 2: { 3:public string Name { get; set; } 4:public int Age { get; set; } 5: } 6: 7:public static class ReferenceAndValue 8: { 9:public static void Demonstration() 10: { 11: Person zerocool = new Person { Name = "ZeroCool", Age = 25 }; 12: Person anders = new Person { Name = "Anders", Age = 47 }; 13: 14:int age = zerocool.Age; 15: zerocool.Age = 22; 16: 17: Person guru = anders; 18: https://www.doczj.com/doc/ca2508987.html, = "Anders Hejlsberg"; 19: 20: Console.WriteLine("zerocool's age:\t{0}", zerocool.Age); 21: Console.WriteLine("age's value:\t{0}", age); 22: Console.WriteLine("anders' name:\t{0}", https://www.doczj.com/doc/ca2508987.html,);

值类型和引用类型的区别

区别: 1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。 2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。 3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。 4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。 5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇幅来深入讨论这个话题。 6、典型的值类型为:struct,enum以及大量的内置值类型;而能称为类的都可以说是引用类型。 7、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,由GC来完成,微软甚至建议用户最好不要自行释放内存。 8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。 9、值类型不具有多态性;而引用类型有多态性。 10、值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向任何托管堆的引用地址。对值为null的引用类型的任何操作,都会抛出NullReferenceException异常。 11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类型通常只有一种形式:装箱 S:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 2.1.2 .NET的3C:CTS、CLS和CLR .NET结合Java和COM解决方案两者优点来解决互操作性问题。类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type System(CTS)的类型标准。这个类

a 基本数据类型

Java 中的基本数据类型 Java 中的数据类型可以分为两种: 基本数据类型 整型 byte short int long 浮点型 float double 字符型 char 布尔型 boolean 引用数据类型 可以说,除了基本类型以外的所有类型都是引用数据类型 主要包括类,接口,数组等 如下图所示 基本数据类型在内存中的分配 数据类型 基本数据类型 引用数据类型 数值型 字符型(char ) 布尔型(boolean ) 整数类型(byte, short, int, long ) 浮点类型(float, double ) 类(class ) 接口(interface ) 数组( [ ] )

注意!:表格里的^代表的是次方 基本数据类型的转换 有两种方式:自动转换和强制转换,通常发生在表达式中或方法的参数传递时。 1 自动转换 具体地讲,当一个较“小”数据与一个较“大”的数据一起运算时,系统将自动将“小”数据转换成“大”数据,再进行运算。而在方法调用时,实际参数较“小”,而被调用的方法的形式参数数据又较“大”时(若有匹配的,当然会直接调用匹配的方法),系统也将自动将“小”数据转换成“大”数据,再进行方法的调用,自然,对于多个同名的重载方法,会转换成最“接近”的“大”数据并进行调用。这些类型由“小”到“大”分别为(byte,short,char)--int--long--float—double。这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。 例如 byte b=10; int i=b;(将byte数据向int赋值时,完成了自动转换) char c=’A’; int i=c;(这时会将’A’对应的ASCII码值赋值给i) 2 强制转换 将“大”数据转换为“小”数据时,你可以使用强制类型转换。 例如: int n=(int)1.23456; 输出结果为1 可以想象,这种转换肯定可能会导致溢出或精度的下降。 注意

int与Integer的区别(Java各种数据类型详细介绍及其区别)

Java各种数据类型详细介绍及其区别基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。 Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。但是有一点需要说明的是,Java里面只有八种原始类型,其列表如下: 实数:double、float 整数:byte、short、int、long 字符:char 布尔值:boolean 复杂类型和基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。 Java的简单数据讲解列表如下: int:int为整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,648到2,147,483,647,在变量初始化的时候,int类型的默认值为0。 short:short也属于整数类型,在存储的时候,用2个字节存储,范围为 -32,768到32,767,在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0。 long:long也属于整数类型,在存储的时候,用8个字节存储,范围为 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0。 byte:byte同样属于整数类型,在存储的时候,用1个字节来存储,范围为-128到127,在变量初始化的时候,byte类型的默认值也为0。 float:float属于实数类型,在存储的时候,用4个字节来存储,范围为32位IEEEE 754单精度范围,在变量初始化的时候,float的默认值为0.0f或0.0F,在初始化的时候可以写0.0。

Java基本数据类型详解——全英文

Java Basic Data Types Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in memory. Based on the data type of a variable, the operating system allocates memory and decides what can be stored in the reserved memory. Therefore, by assigning different data types to variables, you can store integers, decimals, or characters in these variables. There are two data types available in Java: 1.Primitive Data Types 2.Reference/Object Data Types Primitive Data Types: There are eight primitive data types supported by Java. Primitive data types are predefined by the language and named by a key word. Let us now look into detail about the eight primitive data types. byte: Byte data type is a 8-bit signed two.s complement integer. Minimum value is -128 (-2^7) Maximum value is 127 (inclusive)(2^7 -1) Default value is 0 Byte data type is used to save space in large arrays, mainly in place of integers, since a byte is four times smaller than an int. Example : byte a = 100 , byte b = -50 short: Short data type is a 16-bit signed two's complement integer. Minimum value is -32,768 (-2^15) Maximum value is 32,767(inclusive) (2^15 -1) Short data type can also be used to save memory as byte data type. A short is 2 times smaller than an int Default value is 0. Example : short s= 10000 , short r = -20000

类与结构体的区别

区别有三: 1: 类可以继承,结构不可以. 2: 类是引用类型,结构是值类型 3: 类在堆中,结构在栈分配内存 二 .类与结构的差别 1.值类型与引用类型 结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构,通过使用结构可以创建更多的值类型 类是引用类型:引用类型在堆上分配地址 堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑 因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用 注: 1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object 2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用

2.继承性 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的 sealed . 类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承 注:虽然结构不能被继承可是结构能够继承接口,方法和类继承接口一样 例如:结构实现接口 interface IImage { void Paint(); } struct Picture : IImage { public void Paint() { // painting code goes here } private int x, y, z; // other struct members }

java基本数据类型练习题

1 . 用8位无符号二进制数能表示的最大十进制数为 ( C ) A. 127 B. 128 C. 255 D. 256 2 .以下能作为char类型的字面值的有( B ) A. "e" B. 'f' C. '\u12' D. '\u0012' E. '\n' 3 . byte变量的取值范围是( B ) A. 0~65535 B. -128~127 C. -256-255 D. 0~32767 4. 以下选项中正确的有(AC ) A. int i = 32; B. float f = 45.32; C. double d=3.2; D. double d=9.21D; 5 .假定x和y为double型,则表达式x=2,y=x+3/2的值是( D ) A. 3.5 B. 3 C. 2.0 D. 3.0 6 .下列对于>>和>>>操作符描述正确的是( ) A.当左面的操作数是正数时,>>和>>>结果相同。 B. B. (-1 >> 1)的结果是0。 C. C. (-1 >>> 1) 的结果是-1。 D. 只有在右面的操作数大于等于1时, >>> 才会返回负数。 7 .有如下一段代码: 1)public class ReturnIt{ 2) returnType methodA(byte x, double y){ 3) return x/y*2; 4) } 5) } 在第2行中,方法methodA的有效返回类型returnType应该是?(D) A. int B. byte C. short D. double 8. 下列代码的执行结果是( D ) 1)public class Beirun{ 2) public static void main(String args[]){ 3) float t=9.0f; 4) int q=5; 5) System.out.println((t++)*(--q)); 6) } 7)} A. 40 B. 40.0 C. 36 D. 36.0 9.下列代码的执行结果是( D ) 1)public class Beirun{ 2) public static void main(String args[]){ 3) System.out.println(5/2); 4) } 5)} A. 2.5 B. 2.0 C. 2.50 D. 2 10. 下列代码的执行结果是( B ) 1)public class Beirun{ 2) public static void main(String args[]){

C#的数据类型

C#的数据类型主要分为两大类:值类型和引用类型 一、值类型 1、简单类型 1-1整数类型 整数类型的数据值只能是整数。 1-2浮点类型 小数在C#中采用浮点类型的数据来表示 (1)单精度(float):取值范围在±1.5×10-45~3.4×1038之间,精度为7位数; (2)双精度(double):取值范围在±1.5×10-324~3.4×10308之间,精度为15~16 位数。 1-3小数类型 小数(Decimal)类型数据是高精度的类型数据,占用16个字节(128位),取

值范围在±1.0×10-28~7.9×1028之间,精度为29位数。 (1)一般情况下,浮点类型数据和小数类型数据之间没有隐式转换 (2)小数类型数据后面必须跟m或者M后缀,否则会被解释成浮点类型 1-4布尔类型 布尔数据类型用于表示逻辑真或逻辑假,有两种取值:true和false。在C#语言的表达式中,使用布尔值进行判别时,必须使用布尔类型数据 1-5字符类型 C#提供的字符类型数据按照国际上公认的标准,采用Unicode字符集。一个Unicode字符集的长度为16位,可以直接对字符变量赋值,也可以通过十六进制转义字符(以\x开始)或者Unicode表示法(以\u开始)给字符型变量赋值。

2、枚举类型 枚举(enum)型数据实际上是为一组逻辑上密不可分的数值提供一个便于记忆的符号,该类型数据的值只限于列举出来的值。 枚举类型数据的特点: (1)编译系统对枚举类型数据按常量处理,故枚举类型数据又称枚举常量,程序中不能对枚举类型数据进行赋值操作; (2)枚举类型数据作为常量是有值的,编译系统按照其在枚举型定义中的位置顺序,默认情况下值为0、1、2…,也可以给元素直接赋值; (3)枚举型数据可以用来做判断比较,其比较规则按其在定义时的顺序号。 枚举类型数据中常用的方法: 3、结构类型 结构类型数据采用struct进行声明。 二、引用类型 引用类型的数据不直接储存所包含的值,而是指向它所要储存的值。也就是说,引用类型所储存的实际数据是当前引用值的地址,因此引用类型数据会随所指向的值的不同而变化。

相关主题
文本预览
相关文档 最新文档