当前位置: 首页 > 后端技术 > Java

JavaSE基础——数据类型

时间:2023-04-01 15:13:44 Java

变量与常量在使用计算机编写程序时,我们如何表示生活中的各种类型的数据,如年龄、性别、身份证号码等?在Java中,我们用变量和常量的概念来表示。另外,生活中的数据分为可变的和不可变的,比如年龄会随着时间的推移而增长,而pi和普朗克常数的数据是不会改变的,那么我们可以用变量来表示前者,用常量来表示后者。变量的范围。一般来说,定义变量的花括号的作用域就是变量的作用域,因为第二个花括号包含在第一个花括号中。括号中,a是定义在第一个花括号中的,所以第二个花括号也属于a的范围。如果在第二个花括号中定义,在第一个花括号中使用,就会出错,因为此时a的作用域只是第二个花括号的作用域。变量的命名规则我们在给变量命名的时候,只能使用数字、字母和下划线,不能在开头使用数字,而且在命名的时候,一定要看名字,大家熟知,因为这样可以让我们的效率更高阅读代码时。我们不想在一个月后阅读自己的代码时花很多时间思考a、b、c和asdfa变量的作用(当然,这不仅仅是为了我们自己方便。)为了熟悉名字,我们可以采用以下原则来进行描述性的小驼峰命名法,即第一个词的首字母不大写,下一个词的首字母大写,比如maximumage,可以命名为maxAge常量字面值常量字面值常量含义10十进制数010八进制数0x10十六进制数10L/10llong类型值1.0double类型值1.5e2同上,相当于1.5*10^21.0ffloat类型值trueboolean类型字面量valuefalsebooleantypeword字面量值'a'字符型字面量值"hello"string类型字面量值定义(一旦定义,不可修改)Java中有八种基本数据类型和三种引用数据类型八种数据类型int表示整数Anint占4个字符SectionSystem.out.println(Integer.SIZE);//检查Integer类有多少字段(位)。范围是:-2^31~2^31-1System.out.println(Integer.MAX_VALUE);long表示范围较大的Integers,一个long占用8个字节来定义longa=100L;长一=100l;取值范围为:-2^63~-2^63-1float表示一个小数(浮点数),一个float占4个字节definefloatnum=1.1f;浮点数=1.1F;double表示范围更大的小数。double是8个字节。注1System.out.println(1/2);打印结果为0。关于/运算符,如果我们要得到double类型的结果,至少有一个操作数是double注2doublenum=1.1;System.out.println(num*num)执行结果为:之所以会出现精度错误,是因为在内存中使用了有限的空间来存储无限十进制的char来表示各种字符(字符、数字或特殊符号)一个char占用2个字节定义chara='a'byte在网络传输和通信中起着重要作用取值范围是-128到127一个byte占1个字节short表示一个整数,取值范围较小。一个short占用2个字节。范围是:-32768->32767boolean用于表示true或false。boolean类型占用多少空间在不同的JVM中可能不一样,Java中没有明确规定boolean类型不能与int相互转换,比如循环体中的真假判断部分不能是整数类型并应转换为范围较小的类型。可以直接转换为范围较大的类型(隐式转换)。范围较大的类型可以转换为范围较小的类型。类型需要强制转换(可能会丢失精度),不相关的类型不能转换(比如numeric类型和boolean类型,但是int类型和String类型有特殊的转换方式)case1int,double,long类型之间的转换这里可以看到double类型的范围是最大的,因为它直接兼容int类型和long类型,而且我们进行强制转换的时候不会有错误提示Case2Betweenintandbooleantypes这里我们可以看到即使加了强制转换也不会成功,因为int和boolean是两个不相关的类型(不像C语言中0表示false,非0表示true)case3int和char类型之间的转换我们可以看到,int和char之间的转换与Case1基本相同,只是会根据ASCII码表进行转换。Case4int和String的转换从int转换成StringString转换成int数值提升不同数据类型混合计算时,小范围提升为大范围。计算的最小单位是4字节,如果小于4字节(比如short,char)会提升为4字节再计算(这是为了实现硬件计算的方便)Case1Case2有错误,提示“从int到byte的转换可能有损失”创建三种引用类型数组的动态初始化系统会判断有多少个元素,并根据后面初始化的元素分配内存空间。int[]arr=newint[]{1,2,3,4};静态初始化告诉系统数组中有多少个元素int[]arr={1,2,3,4}用于获取数组长度System.out.println(arr.length)通过[访问数组元素]对于访问,下标不能超过arr.length-1(因为下标从0开始)System.out.println(arr[0]);修改数组元素arr[0]=10遍历数组和数组的方法作为方法的参数注意,因为数组是引用类型,当作为方法参数传入时,当数组的值在方法内修改,原数组也会被修改。详见:什么是方法返回值的引用类型?即只存储所有元素的首地址,使用时根据地址访问其他元素。这里打印出来的是所有元素的首地址。我们上面的八种类型都是内置类型,像这样intnum=10;而内存中的引用类型是int[]arr={1,2,3};因此,如果将引用类型作为方法参数传递,则修改方法后原始数据也会受到影响,而内置类型不会受到影响。内置类型用作方法参数。如果数据设置为null,则表示它不指向任何空间。int[]arr=null如果试图访问其中的元素,就会出现NullPointerException。这个异常类是指一类对象的集合名称。它是一个类,建造的房子是一个对象。我们可以根据设计图建造很多房子,我们可以根据类实例化很多对象。类的声明成员变量。私有getter和setter代码块的分配和封装普通代码块构造代码块静态代码块String类创建这四种方式都可以是内存分配顺便说一下字符串常量池,以及上面几种创建方式的区别转义符用于创建字符,在串的时候,我们需要用""把内容包起来,但是如果我们想在里面的字符后面加上"",就会出现一个问题,就是字符串提早结束。因此,我们可以加一个反斜杠,相当因为你需要告诉计算机“嘿,这是字符串的一部分,不是结尾”\"也叫转义符转义符意思是\nnewline\''\""\\\\ttabkeycharacter的打印字符串拼接的结果是:如果字符串的内容是一个数字,那么拼接后的结果会不会是两个数字相加呢?可见拼接的动作很简单,就是把字符连接起来,比较字符串是否相等.使用比较运算符进行比较是没有问题的,但是从上面我们可以知道,如果使用这种创建方式,两个字符串在内存中指向的是同一个地址,那如果指向不同的地址呢?是不同的吗?为了验证这个想法,需要让两个字符串指向的内存地址不同。果然,当指向的内存地址不同时,即使字符串内容相同,结果也是假的。其实,比较运算符对于引用类型的数据,比较的不是内容,而是它们指向的地址。例如,我们可以想象==比较两个盒子。如果盒子相同,则结果为真,不关心里面的内容。东西是否相同但这不是我们想要的。我们关心的是字符串内容不同,不关心是否指向同一个内存地址。因此,我们不能使用比较运算符来比较字符串是否相等。在String类中提供了一个equals方法来比较两个字符串的内容。equals注释当我们比较字符串常量和字符串对象时,下面两个似乎没有区别,但是当字符串对象引用为null时,第二种方法会抛出异常,而第一种方法不会。其实从上面的类和对象的知识我们可以了解到,当一个对象引用为null时,如果你试图调用类里面的方法,就会抛出NullPointerException(“Hello”或者“”等字面值常量,其实就是一个本质上是String对象,也可以调用String对象的方法)字符和字符串字节和字符串字符字符串常用操作这里的所有方法都是公共比较方法名functionbooleanequals(ObjectanObject)比较字符串内容是否相等booleanequalsIgnoreCase(StringanotherString)同上,但不区分大小写intcompareTo(StringanohterString)比较两个String大小关系查找方法名函数booleancontains(CharSequences)判断子串是否存在intindexOf(Stringstr)从头开始??查找指定字符串的位置,找到则返回该位置的起始索引,找不到则返回-1intindexOf(Stringstr,intfromIndex)查找字符串的位置substringfromthespecifiedpositionintlastIndeOf(Stringstr)从后往前查找子串的位置intlastIndexOf(Stringstr,intfromIndex)从指定位置从后往前查找booleanstartsWith(Stringprefix)判断是否以指定字符串开头booleanstartsWith(Stringprefix,inttoffset)从指定位置判断是否以指定字符串开头booleanendsWith(Stringsuffix)判断是否以指定字符串结尾替换方法名functionStringreplaceAll(Stringregex,Stringreplacement)替换所有指定内容StringreplaceFirst(Stringregex,Stringreplacement)替换第一个指定内容Stringregex,intlimit)同上,数组长度为limitlimit截取方法名函数Stringsubstring(intbeginIndex)从指定索引处截取到结尾Stringsubstring(intbeginIndex,intendIndex)截取部分content其他方法名functionStringtrim()去除字符串左右空格,保留中间空格StringtoUpeperCase()将字符串转为大写StringtoLowerCase()将字符串转为小写nativeStringintern()字符串池化操作Stringconcat(Stringstr)字符串拼接,相当于“+”,不是poolingintlength()得到一个stringLengthbooleanisEmpty()判断是否为空字符串(只是长度为0,不为null)界面