今天突发奇想,不知道怎么的就想到了String是否是基本数据类型这个概念上了。。
在我的印象中,String是基本数据类型,但是百度了一下,很多说String是一个对象,而不是基本数据类型。
这样就产生了一个问题,如果一个方法传入一个String类型,外面的String类型的值是不会变的,而这属于基本数据类型的特性吧?
求高手详细解答下。
在我的印象中,String是基本数据类型,但是百度了一下,很多说String是一个对象,而不是基本数据类型。
这样就产生了一个问题,如果一个方法传入一个String类型,外面的String类型的值是不会变的,而这属于基本数据类型的特性吧?
求高手详细解答下。
解决方案 »
- 菜鸟求问
- 求算法高手
- 诚求各位解答:不同网段不能通信是IP软件之规定吗?
- XML 英文版怎么弄!门内人士有没有永久的cd-key呢???
- NullPointerException
- oracle的jdbc驱动必须安装?还是只要在ClassPath里指定了几个.jar包 就可以用了?
- 用java连接数据库时能够不用数据源吗?
- 求java并发包的资料
- 请网友帮助查看这段出错代码,功能:从Sql server2000中读取数据
- 给出ip,想得到hostname,该怎么做?
- ItemUnitList cannot be resolved to a type怎么解决了!请大牛指点!!
- 如何获取并验证用户在文本框中输入的密码是否正确
public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence
String类被称为不可变字符串
对String对象的修改是在new 一个新的String对象的基础上进行的
原来的String对象的内容并为改变啊
String aa ==“aa”;
aa=aa+“bb”;
等号右边产生一个新的对象,此时的aa的内容并为改变
之后aa指向新对象的引用。
至于方法传入String对象,这个就不需要解释了吧
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abc"; //1、声明两个对象,值为"abc"的对象赋给str对象
new StringTest().setString(str);
System.out.println(str); //4、str对象没有变
}
public void setString(String str1){ //2、声明了str1对象,把str对象赋给str1
str1 = "123"; //3、值为"123"的对象赋给str1对象
}
例如:public static void main(String[] args) {
String s="Hello";
}会先在常量池中创建“Hello”,然后在堆中创建new String("Hello")对象,最后在栈中创建一个String类型的指针s来指向堆中的对象。
内存中一段连续的字节数据,根据不同的数据类型可以用数字或某个符号来解释其含义。像long,double,int,boolean这些啊,可以简单的解释成某个数字。而String这样的类型,包含了很多其他额外的信息,如方法区信息,类型修饰符,继承信息等,这些都是面向对象中的概念,也是将"基本数据类型"组合而成的一些概念,所以这里像上面所说的"原生类型","组合类型"感觉更恰当些。
如果说c语言中的char* 字符串是基本类型那还说的过去,java中的就算了
8大基础类型
byte,short,int,long,float,double,char,boolean
String 是个对象,是引用类型基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构
基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为
java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer类。
The primitive data types supported by the Java Virtual Machine are the numeric types, the boolean type (§2.3.4), and the returnAddress type (§2.3.3).The numeric types consist of the integral types (§2.3.1) and the floating-point types (§2.3.2).因此基本数据类型就是:
integral types , floating-point types , boolean type 和returnAddress type至于有些脑残的面试官要是问为什么String不是基本数据类型,就搬这句话出来吧
这样说的话long就有可能不是基本数据类型了,在32位cpu下,在一个时间片段内不能处理64位的long。
你在方法中调用其他的类对象,外面的值也不会改变啊,而且String是final类一旦被初始化就无法被改变
整型 :int long
浮点 :double float
字符 :char
布尔 :boolean
而你所说的“如果一个方法传入一个String类型,外面的String类型的值是不会变的,而这
属于基本数据类型的特性吧?”这个问题,那是因为String类型是jdk中的一个不可变类,也
就是无论你怎么去虐待它,它依旧是当初的那个样子,给它剪头发也不行,这就是不可变类型
的彪悍所在
这样说的话long就有可能不是基本数据类型了,在32位cpu下,在一个时间片段内不能处理64位的long。
搞笑,你以为怎么计算long型的呢?