1、基础数据类型;
为什么优先级低于int的数据相加结果会是int;例始:byte a+ byte b 结果为int;
2,怎么理解JDK里的下面这句话;"字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们"分析:如果是因为String是声明为final的话,也只是说明类不能被extends,再者所有基础数据类型都是final的;
为什么优先级低于int的数据相加结果会是int;例始:byte a+ byte b 结果为int;
2,怎么理解JDK里的下面这句话;"字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们"分析:如果是因为String是声明为final的话,也只是说明类不能被extends,再者所有基础数据类型都是final的;
2.字符串是常量我觉得没错,像"abc"就是一个字符串,当使用String st1 = "abc"; 后,st1的值就不能再改变.它会被分配到堆内存中存放,而在盏内存则放着st1相应的在堆内存中的地址,即st1是代表它在盏内存的地址,然后再通过这个地址,找到堆内存中找到相应的值"abc",这个值一旦创建就不可再修改内存中的值,当我们继续调用 st1 = st1+"a";后,具体的操作是会把st1+"a" 用另一个堆内存区来存放,然后把st1的地址再指向这个新的堆内存,所以st1就得到新的值"abca",与此同时,原来的值"abc"亦没有被释放,等待垃圾收集器回收.因此,认为字符串的值不可变.以上是我的理解.
因为byte本来就是一种整型变量,整型变量类型还包括short,int,long;
byte用占8位即1个字节,表示数的范围是:-128-127;两个byte类型的变量相加很容易超出byte的表示范围.
我想就是因为这个原因吧.
short 16位,2个字节,范围:-32768-32767
int 32位,4个字节,范围:-2147483648-2147483647,这个数字够大了,做为一般运算,再怎么运算也不会溢出的.
long 64位,8个字节范围:-9223372036854775808-9223372036854775807第二个:
String a="test";
String b="test";
a==b;//true;
常量是说"test",不是在说a或者b,a和b只是一个引用而已.
编译器执行第一句时,会先看内存中是否有"test",如果有就不创建了,直接用a来引用,如果没有就创建一个"test"的字符串,等到执行第二句时,内存中已经有了一个"test",所以就不直接创建一个b来应用它.这就说明a和b同时共享"test",a和b的改变不会影响到"test"的值.不知道我这么说你明白了没....这只是个人理解,期待老鸟解释.........
编译时常量才必须是primitive type
String的replace方法不通过直接改变String值的方式 而是返回一个新的String这一现象也从侧面反映了final String这一特性
这个问题初学Java的时候了解过一点,所以具体的名词可能有些差错,但基本的原理应该是这样的。
String a="asd";
a="weroiuweroi";
//这样也是可以,它的长度和内容全都改变了呀;
比如说
String a="asd";
String b=a;
a="weroiuweroi";
a确实被改变了,因为它实际做了一个a=new String("weroiuweroi")的操作
而b却没有被改变,从而说明"asd"没有被改变,而说明其final特性
String a="asd"; //a里存储的地址为: a001
a="weroiuweroi"; //更改后,a存储的地址则为 : a003也就是字符串改变后,返回了一个新的对象,并且把新对象的引用赋给了a.
我不同意你的意见,照你这样说int+int也可能出现超过int的情况,杂没自动转成比int长度的呢
而str不能被改变,个人认为纯粹是国为sun JDK没提供修改的方法;第一种我理解是这样的
在编程语言产生的初期,存储器比较小,所以从节药资源和性能上来说才会出现定义变量之说,定义变量类型有什么好处呢,看下面我的分析:
在加载代码的时候,是按照一定的格式来存储的,这样有利于空音的合理利用,打个比方:假如你存一个 int a这个数,系统读到这就知道是int空间,然后分配相应的int空间量然后把这个值进去,假如 没有数据类型定义 a 当到这里以后,需先解析出a的值,然后再跟据a值来分配空间,明显后者要效率低且空易出问题,以上确定了为什么开发语言中会有基础数据类型的定义,当有定义以后,我们来关心另一问题,虽然java有8种基础数据类型,但是并不说明就一定有8种内存分配方式,我大胆推测,int以下的数据都是按int方式划分内存空间存储的,这也就能理解泽为啥结果会是int,再得switch case也可以看出,这里只能是整数,但是确包括(byte,char,short,int);