文档章节

java的修饰引用变量的final和C++的const区别真的很大

zray4u
 zray4u
发布于 2016/08/16 12:25
字数 493
阅读 24
收藏 0

Bug ID: JDK-4211070 Java should support const parameters (like C++) for code maintainence http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4211070

A reference variable or constant declared as 'final'
has a value that is immutable and cannot be modified to
refer to any other object than the one it was
initialized to refer to.  Thus the 'final' specifier
applies to the value of the variable itself, and not to
the object referenced by the variable.
Only reference (non-primitive) types can have the
'const' specifier applied to them.  Primitive types
that need to be declared 'const' should be declared
'final' instead.

下面是自己写的一个关于java的final关键字的例子。可以说明上面的性质。

注意上面的性质只是针对reference variable,对于 Primitive types(基本数据类型),final关键字的意义和C++中的const是相同的。

疑问:

一、java中有没有什么方法可以实现类似C++中const对于函数返回引用类型时不可更改的限定效果??

二、C++中返回了const对象的引用,要将一个const对象引用赋值给一个非const引用是需要一定的技巧的。不能直接赋值。相关技术:指针,C++中的强制类型转换。由此可见const修饰只是让修改某个数据的限制增大,在C++中通过指针操作等,还是可以修改const变量的值的。难道这也是java中不使用const的原因??

三、在java中对于对象的引用的传递要时刻小心,尽可能减少直接传递对象的引用,而返回相应的数据域等。总之,遵循只传递方法完成功能所需的最少数据的原则。

class Base{
    private int data;
    
    public Base(int n){
        this.data=n;
    }
    public boolean setData(int data){
        this.data=data;
        if(this.data==data) return true;  //这样写真的好吗??
        else return false;
    }
    
    public int getData(){
        return this.data;
    }
    

}
public class FinalKeyWordsTest{
    
    public static void main(String[] args){
        final Base base=new Base(12);
        base.setData(13);
        System.out.println(base.getData());
                
        //错误: 无法为最终变量base分配值
        //base=new Base(11);  //can't do this on a final refernece varible.
        
    }

}

© 著作权归作者所有

共有 人打赏支持
zray4u
粉丝 0
博文 208
码字总数 187679
作品 0
西城
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
08/13
0
0
Java中的引用和C++中引用的区别

用过java和C++的同学都知道在二者中均有引用的概念。但是这两个概念所代表的并不相同。 首先了解C++ 中引用的含义:“引用”即“别名”。C++中的引用代表的就是实际的存储空间。对其进行操作...

osDaniel
2013/12/02
0
0
Java finalize方法

《JAVA编程思想》: java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4)....

清风伴月
2017/10/22
0
0
Android JNI(一)——NDK与JNI基础

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
05/09
0
0
浅析:Java与C++的主要区别

Java区别于C++ 表面看来两者最大的不同在于Java没有指针,或者说,Java满地都是指针。对于编程者而言Java的这种设计是安全且更易用的。说Java满地是指针的原因在于它把指针的功能隐藏了,其实...

Ace☞Tseng
2012/10/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
1
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部