Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改。list其中类型为对象时,String时,基本数据类型时。

【java中的对象类型与基本数据类型的区别】


#声明和实例化

声明:ArrayList a, 仅仅只是声明了一个list变量,其未来作用相当于C++中的引用变量,亦或者相当于一个对象块的索引,但并未为其分配具体的完整的对象所需要的内存空间,其所分配的空间仅仅只是"a"变量所需空间;

实例化:实例化的过程是为对象分配完整的所需内存空间。此时,对象a才是该list的一个实例,然后将分配的内存地址返回给定义的变量“a”;


#Java的实例化

1. 使用new关键词创建对象(c++)。

2.通过jdk中提供的工厂方法返回对象。如String str = String.vlaueOf("test");

3.通过反射机制。最经常使用的则是JDBC: String driver = "com.MySQL.jdbc.Driver";Class.forName(driver);

4.通过类的clone()方法。

5.通过反序列化手段。


问题: https://zhidao.baidu.com/question/304278653164386644.html
Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?不应该只有一个类型——对象吗?
1.首先,这问题问得很好!说明认真思考了。Java中一切皆是对象!这句话没错,因为八种基本类型都有对应的包装类(int的包装类是Integer),包装类自然就是对象了。 基本类型一直都是Java语言的一部分,这主要是基于程序性能的考量,基本类型定义定义的变量是存放在栈中,比如int i = 5;而Integer j = new Integer(10);j则只是一个对象的引用,存放在栈中,而实际的数值10则是放在堆里,堆的读写速度远不及栈了。再有就是基本类型定义的变量创建和销毁很快,而类定义的变量还需要JVM去销毁。
2.其实java不是100%的面向对象编程,比如基本数据类型如int,boolean等等都不是对象,也就是不能用new的方式获取,但是java对这些基本数据类型都有解决办法,就是对着一个封装类型,但是他们的封装类是对象。比如int对应着Integer,boolean对应着Boolean,他们都是为了既决基本数据类型面向对象用的。
对象与基本数据类型的区别
基本数据类型在栈中进行分配,而对象类型在堆中进行分配。
 所有方法的参数都是在传递引用而非本身的值(基本类型例外)。
对象之间的赋值只是传递引用,基本类型之间的赋值是创建新的拷贝。
对于基本类型,“==”和“!=”是在比较值。而对于对象来说,“==”和“!=”是在比较两个引用是否相同。
使用equals()方法有一点需要注意:equals()方法的默认行为是比较引用。如果是你自己写的类,你应该为它重写equals()来比较对象的内容。大多数Java类库都实现了比较对象内容的equals()方法。
基本类型存储了实际的数值,而并非只想一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如,对基本数据类型使用a=b,那么b的内容就复制给a.若接着又修改了a,而b根本不会受这种修改的影响。

 

对一个对象赋值时,真正操作的是这个对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方。这意味着假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象


///
JAVA的基本数据类型和引用数据类型的区别:
浅【谈一下JAVA对象,对象引用以及对象赋值】 url:
http://blog.csdn.net/z69183787/article/details/21123605
只有理解了对象和引用的关系,才能理解参数传递。

    一般面试题中都会考Java传参的问题,并且它的标准答案是Java只有一种参数传递方式:那就是按值传递,即Java中传递任何东西都是传值。如果传入方法的是基本类型的东西,你就得到此基本类型的一份拷贝。如果是传递引用,就得到引用的拷贝。
————————————————
版权声明:本文为CSDN博主「jiuyan9939」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hdkjdhdj/article/details/53336116

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的包装数据类型是用来将基本数据类型转换为对象类型。包装类有两种子类型对象型包装类和数值型包装类。对象型包装类包括Character和Boolean,而数值型包装类包括Byte、Short、Integer、Long、Float和Double。\[2\] 在Java基本数据类型和包装类之间可以通过装箱和拆箱操作进行转换。装箱操作是将基本数据类型转换为包装类,可以使用包装类的构造方法来接收基本数据类型的变量。而拆箱操作是从包装类取出被包装的数据,可以使用从Number类继承而来的xxxValue方法来完成。\[3\] 例如,可以使用Integer类的构造方法将int类型的数据装箱为Integer对象,然后使用intValue方法将Integer对象拆箱为int类型的数据。下面是一个示例代码: ```java Integer obj = new Integer(10); int num = obj.intValue(); System.out.println(num); ``` 这段代码将整数10装箱为Integer对象,然后将Integer对象拆箱为int类型的数据,并输出结果为10。\[3\] #### 引用[.reference_title] - *1* [Java的包装类](https://blog.csdn.net/weixin_46140377/article/details/123404981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JAVA基础编程——基本数据类型的包装类](https://blog.csdn.net/SAKURASANN/article/details/124647622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值