Java基础知识小清单(一)

来源:互联网 发布:ps有没有mac版 编辑:程序博客网 时间:2024/04/29 13:28

*Java确实是一门不错的语言,但是概念太多往往过上一段时间当时拍手叫好的东西也会被忘得一干二净,所以开了篇回头看博文,

重点介绍基础知识中的字符串

Java的8个基本数据类型

这里写图片描述

浮点型默认为double,故定义float类型需要加上f(F)。

字符型默认值是编号为0的字符,而不是字符0,这个切记。

以上是Java的自动类型转换,注意: 任意的基本数据类型都可以转为String。

题目:不借助临时变量,交换a,b的值

方法一:

a=a^b;b=b^a;a=a^b;

方法二:

a=a+b;b=a-b;a=a-b;

方法三:

a=a*b;b=a/b;a=a/b;

论数据后缀名的重要性

long  l=2147283640*10;

输出的l是-80,原因在于,等式右边是int型,*10后已经超出范围,故而溢出,所以应该在2147283640后面加上L(l)

java没有运算符重载,只有方法重载。

||与| 和 &&与&都可以用于逻辑运算,但是|和&即使满足第一个条件下,依然会检查后一个条件。

>>> 无视符号类型,全部填0处理。

类型自动转换
这里写图片描述

当两个数值进行运算时,运算结果至少是int型。

short s=1; s=s+1;//错误,没有进行强制类型转换short s=1; s+=1;//正确,+=进行了隐式强制类型转换

byte d=3+5; 是错误的,应该加上强制类型转换,即byte d=(byte)(3+5);

适用移位运算的操作数有:byte、short、char、int、long。

经过移位运算的结果至少是int型。


switch(判断表达式)
其中的判断表达式只能为byte、short、char、int、String和enum, 因为long和浮点型精度太高,本来只支持int型,而byte、short、char可以自动类型转化为int型,String和enum是后来加进去的。

break后面不能接语句,否则会报错。

数组元素的数据类型必须一致,boolean的初值为false。

foreach(但无法改变原对象的值)

未完待续。。。


方法和字符串

方法的返回值类型可以是基本数据类型也可以是引用数据类型。

这里写图片描述

方法重载:
方法名必须相同,参数列表必须不同(参数变量名不同被视为参数列表相同),返回值类型无所谓

可变参数

访问控制符  [修饰符]  返回值类型  方法名(参数类型...参数名)    程序代码;    [return   返回值]    }

一个方法只能定义一个可变参数,且当有方法有多个参数列表时,可变参数要放到最后面。
==和equals

==比的是值和内存地址(引用),equals比的是对象本身(实例)

String初始化
方法一:String 字符串名="字符串内容";

方法二:String 字符串名=new String("字符串内容");

方法一和方法二的不同在于,
使用方法一时Java编译器总是先到缓冲池取寻找是否有相同内容的字符串,如果存在则直接使用,不存在则在缓冲池内创建一个新的字符串。
方法二则是每次调用都会生成一个新的String对象。

例如:图中的s1和s2就是方法一初始化,而s3和s4则是方法二初始化。
这里写图片描述

这里写图片描述

这里写图片描述

因为s3==s1+s2+ 两边都是变量,所以Java会在堆内存中新建一个对象,值为”abcABC“,然后将地址返回比较。

s3==s1+”ABC”false是因为当字符串常量与String类型变量连接时得到的新字符串不再保存在常量池中,而是在堆中新建一个String对象来存放,很明显str3在常量池,而String在堆上,故结果不同。

s3==”abc”+”ABC”+ 两边都是常量,Java会先将两个字符串常量连接起来,然后到缓冲池中寻找是否有与abcABC相同内容的字符串。

再来瞧瞧其他的

这里写图片描述

这里写图片描述

这里的final 定义的String很显然会在编译期间实现替换,所以可以算做常量看待。但如果是这样的话
这里写图片描述

那么其实和final String str4=new String(“23”); 是没有什么去别的,上面的方法get();会在运行时在堆上创建一个String对象保存“23” ,所以虽然str4被定义为final,但在运行时“23”才会被创建出来 ,此时也就不能当作常量来处理了。

再看一例

这里写图片描述

这里写图片描述

第一组:因为== 是比较值的,如果两边都是对象,那么比较的自然就是对象的内存地址,故而为false, 而equals 如果是object类那么也是比较地址的,因为还没有重写,而String对象的equals方法是重写过了的,所以比较的对象本身,故为true

第二组: substring 中如果index==0,那么返回的是对象本身,否则new一个substring的对象返回,而==又是值比较,故得图上结果。

第三组: String的toUpperCase和toLowerCase都是new一个新的对象返回,故得图上结果。

未完续接(二)。。。

原创粉丝点击